Snowflake中Varchar转Timestamp返回1970年错误时间问题咨询
问题产生原因
Snowflake的to_timestamp_tz函数在传入字符串类型的数值且未指定格式时,会默认将该字符串识别为Unix epoch时间戳(即从1970-01-01 00:00:00 UTC开始累计的秒数)。你传入的字符串19810801会被直接当作19810801秒来换算,该秒数距离1970年1月1日的时长约为229天,最终换算结果就是你得到的1970年8月的错误时间。
正确转换写法
你需要为函数显式指定字符串对应的日期格式,你的字段值格式为YYYYMMDD(4位年份+2位月份+2位日期),修改SQL如下即可得到正确结果:
SELECT to_timestamp_tz(EFFECTIVE_DATE, 'YYYYMMDD') FROM Table1;
上述语句执行后,对应19810801的转换结果为预期的1981-08-01 00:00:00.000 +0000,时区可根据实际业务需求调整。
异常值处理建议
如果你的EFFECTIVE_DATE字段中存在格式不规范的异常值,可以使用TRY_TO_TIMESTAMP_TZ函数替代,解析失败时会返回NULL而不会直接中断SQL执行:
SELECT try_to_timestamp_tz(EFFECTIVE_DATE, 'YYYYMMDD') FROM Table1;
内容的提问来源于stack exchange,提问作者LKOMason
相关产品推荐
相关产品推荐

