Snowflake无法设置时区参数时如何比较视图内不同时区的两个日期
Snowflake不同时区偏移日期比较解决方案
错误原因说明
你直接执行比较返回FALSE的核心原因是:你比较的是两个字符串值,Snowflake默认会按字典序逐字符对比,不会自动识别字符串末尾的-0800这类时区偏移量,因此得到不符合预期的结果。
解决方法
无需硬编码时区偏移,只要将两类时间字符串统一转换为Snowflake的TIMESTAMP_TZ(带时区的时间戳类型)后再比较即可,TIMESTAMP_TZ类型会自动存储时区信息,比较时会统一对齐到UTC时间计算,结果符合预期。
示例SQL
SELECT -- 转换无时区的时间字符串:请替换'UTC'为该无时区时间实际对应的时区 TO_TIMESTAMP_TZ('2021-12-02 06:00:56.000', 'YYYY-MM-DD HH24:MI:SS.FF3') AT TIME ZONE 'UTC' < -- 转换带偏移的时间字符串:自动识别末尾的动态偏移量,无需硬编码 TO_TIMESTAMP_TZ('2021-12-02 00:57:56.107 -0800', 'YYYY-MM-DD HH24:MI:SS.FF3 TZHTZM') AS compare_result;
上述示例执行后返回结果为TRUE,和你的预期一致。
说明
- 如果无时区的时间默认对应其他时区(比如东八区),只需将上述代码中的
UTC替换为对应时区标识符(例如Asia/Shanghai)即可 TO_TIMESTAMP_TZ支持自动解析任意格式的标准时区偏移(如-0800、+0530、Z等),适配动态偏移的场景- 也可以将两个转换后的
TIMESTAMP_TZ都用AT TIME ZONE '目标时区'统一转成无时区的时间戳后再比较,逻辑完全等价
内容的提问来源于stack exchange,提问作者Prashant singh
相关产品推荐
相关产品推荐

