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
相关产品推荐
相关产品推荐

