You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 13:03:21