You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake中Variant列时间戳转日期的条件更新WHERE子句编写

解决方案

要精准筛选出booking_date为带时间戳格式的行(仅Id=2的行),可以通过以下条件组合编写WHERE子句:

最终UPDATE语句

UPDATE tab 
SET json_delta = OBJECT_INSERT(json_delta, 'booking_date', TO_DATE(json_delta:booking_date::varchar), TRUE)
WHERE 
  -- 确保booking_date字段存在且不为null
  json_delta:booking_date IS NOT NULL
  -- 通过长度区分纯日期和带时间戳的字符串
  AND LENGTH(json_delta:booking_date::varchar) > 10;

条件说明

  • json_delta:booking_date IS NOT NULL:直接排除Id=3(无booking_date字段)和Id=4(booking_date为null)的行
  • LENGTH(json_delta:booking_date::varchar) > 10:纯日期格式的字符串长度固定为10(如"2022-11-18"),而带时间戳的字符串长度更长(如"2017-02-24 14:00:00.123"),以此区分两种格式。

更严谨的正则匹配方案(可选)

如果担心存在特殊长度的纯日期字符串,可改用正则表达式精准匹配时间戳格式:

UPDATE tab 
SET json_delta = OBJECT_INSERT(json_delta, 'booking_date', TO_DATE(json_delta:booking_date::varchar), TRUE)
WHERE 
  json_delta:booking_date IS NOT NULL
  AND REGEXP_LIKE(json_delta:booking_date::varchar, '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.*$');

该正则会匹配以YYYY-MM-DD HH:MI:SS开头的字符串,能更精准识别带时间部分的booking_date值。

内容的提问来源于stack exchange,提问作者YogeshR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 02:13:24