Snowflake中12小时制转24小时制TIMESTAMP_NTZ的SQL问题
解决Snowflake中12小时制时间转24小时制TIMESTAMP_NTZ的问题
错误原因
你当前查询报错的核心问题是**TO_TIMESTAMP函数的参数顺序颠倒**。Snowflake中TO_TIMESTAMP的正确语法是TO_TIMESTAMP(<待解析的字符串>, <格式匹配字符串>),而你把格式字符串'YYYY-MM-DD hh:mm:ss aa'放在了第一个参数位置,导致系统无法识别输入的时间字符串格式,进而抛出解析错误。
正确实现方案
不需要多层嵌套转换,直接使用TO_TIMESTAMP_NTZ函数,指定匹配12小时制的格式字符串,解析拼接后的日期时间即可:
SELECT TO_TIMESTAMP_NTZ(CONCAT(DATE, ' ', TIME), 'YYYY-MM-DD hh:mm:ss aa') AS timestamp_column FROM FCT_LYTX_CAMERA_EVENT;
补充说明
TO_TIMESTAMP_NTZ支持直接通过第二个参数指定输入字符串的格式,一步完成解析+类型转换,无需额外的TO_VARCHAR中转。- 格式符
aa会自动兼容大小写的AM/PM标识(比如pm/PM/am/AM),无需单独处理大小写问题。 - 最终得到的
timestamp_column即为你需要的TIMESTAMP_NTZ类型,其内部存储为时间戳值,如需以'YYYY-MM-DD HH24:MI:SS'格式展示,可通过会话参数ALTER SESSION SET TIMESTAMP_NTZ_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS';调整显示格式。
内容的提问来源于stack exchange,提问作者Lan
相关产品推荐
相关产品推荐

