Snowflake中如何将长文本datetime转换为YYYY-MM-DD HH:MM:SS格式时间戳
问题根因
- 原有格式字符串遗漏了时区缩写(EDT)的匹配规则
- 分钟格式符误用
MM(该符号用于匹配月份),正确分钟格式符为MI - 未指定24小时制格式符
HH24,默认HH仅支持12小时制时间解析
可行解决方案
方案1:固定时区为EDT的场景
如果所有待解析的日期时区固定为EDT,可直接在格式串中用双引号包裹固定字符串匹配EDT:
SELECT TO_TIMESTAMP_NTZ('Wed May 29 23:36:39 EDT 2019', 'DY MON DD HH24:MI:SS "EDT" YYYY');
方案2:时区不固定的通用场景
用TZ格式符匹配任意时区缩写,先解析为带时区的时间戳,再按需转换为无时区时间戳:
SELECT TO_TIMESTAMP_TZ('Wed May 29 23:36:39 EDT 2019', 'DY MON DD HH24:MI:SS TZ YYYY')::TIMESTAMP_NTZ;
输出为指定格式字符串
如果需要最终输出为YYYY-MM-DD HH:MM:SS格式的字符串,在外层嵌套TO_CHAR函数即可:
SELECT TO_CHAR( TO_TIMESTAMP_TZ('Wed May 29 23:36:39 EDT 2019', 'DY MON DD HH24:MI:SS TZ YYYY'), 'YYYY-MM-DD HH24:MI:SS' ) AS formatted_datetime;
注意事项
- 涉及24小时制的时间解析必须使用
HH24格式符,避免12小时制匹配导致的解析错误 - 不要混淆月份匹配符
MM和分钟匹配符MI
内容的提问来源于stack exchange,提问作者Lakm
相关产品推荐
相关产品推荐

