Snowflake日期转换查询异常:输入任意日期均返回1970开头结果求因
错误日期转换的原因解析
问题根源是ALIS.CYCAL_DATE::DATE这个隐式转换的逻辑不符合你的预期:
- 如果
CYCAL_DATE是数字类型(INT/BIGINT等),Snowflake将数字转DATE时,会把数值当作Unix纪元(1970-01-01 00:00:00 UTC)以来的秒数来计算,而不是把它当成YYYYMMDD格式的日期数字。 - 你输入的
20190520、20050511这类数值,换算成秒数的话,对应的日期都是1970年8月(2000万秒约等于231-233天,1970年1月1日加上这个天数正好落在8月),所以输出会统一以197008开头,末尾两位随具体数值对应的秒数不同略有差异。
而你用的正确写法TO_DATE(ALIS.CYCAL_DATE,'YYYYMMDD')是显式指定格式的转换,它明确告诉Snowflake:输入的CYCAL_DATE(不管是数字还是字符串)要按照YYYYMMDD的格式解析成日期,因此能正确识别目标日期,再转成字符串就不会出现错误。
内容的提问来源于stack exchange,提问作者vishnusai6923
相关产品推荐
相关产品推荐

