Snowflake SQL中如何将'May 30 2022 9:30PM'转为'2022-05-30 21:30:00'
Snowflake 自定义格式文本日期转标准日期时间实现方案
直接使用CAST函数转换失败的核心原因是:Snowflake默认的隐式日期解析规则不匹配May 30 2022 9:30PM这类英文月份缩写 日 年 12小时制时间带AM/PM的格式,无法自动识别字符串的日期语义。
正确转换需要使用支持自定义格式模板的日期解析函数,显式声明输入字符串的格式规则:
转换为标准日期时间类型
使用TO_TIMESTAMP(或TO_DATETIME)函数,第二个参数传入和输入匹配的格式串即可:
SELECT TO_TIMESTAMP('May 30 2022 9:30PM', 'Mon DD YYYY HH12:MIAM') AS standard_datetime;
执行后返回的时间类型值为2022-05-30 21:30:00.000,和预期结果一致。
格式串各标识和输入内容的对应关系:
Mon:匹配3位英文月份缩写(如Jan、May、Dec)DD:匹配月份中的日期数值,自动兼容1位/2位日期YYYY:匹配4位完整年份HH12:匹配12小时制的小时值MI:匹配分钟数值AM:匹配上下午标识(AM/PM),自动完成12小时制到24小时制的换算
输出固定格式的日期时间字符串
如果需要直接返回2022-05-30 21:30:00格式的文本值,可以在解析后套一层TO_CHAR指定输出格式:
SELECT TO_CHAR( TO_TIMESTAMP('May 30 2022 9:30PM', 'Mon DD YYYY HH12:MIAM'), 'YYYY-MM-DD HH24:MI:SS' ) AS formatted_datetime_str;
表字段批量转换示例
如果是处理表中存储该类日期格式的文本列,直接将常量替换为列名即可:
SELECT TO_TIMESTAMP(your_text_date_col, 'Mon DD YYYY HH12:MIAM') AS standard_datetime FROM your_table;
注意:该解析逻辑会自动兼容输入字符串中多余的空格、1位数字的日期/小时值,不需要额外做字符串预处理。
内容的提问来源于stack exchange,提问作者K.Tom
相关产品推荐
相关产品推荐

