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

SQL中多格式日期统一标准化:TRY_CAST转换部分日期返回NULL

解决多格式日期统一转换问题

你的日期列包含两种格式:

  • 英文月份缩写格式:"Jul 28 2023 3:16PM"(带双空格)
  • 标准ISO格式:"2022-09-29 11:30:00"

TRY_CAST无法自动解析第一种格式,导致转换结果为NULL。以下是不同SQL方言的解决方案:

SQL Server

方法1:使用TRY_PARSE(推荐,支持更多格式)

TRY_PARSE依赖.NET的日期解析规则,能直接识别英文月份+AM/PM的格式,包括双空格:

SELECT 
    TRY_PARSE(your_date_column AS DATETIME USING 'en-US') AS standardized_date
FROM 
    your_table;

方法2:替换空格后用TRY_CONVERT

先将双空格替换为单空格,再用对应格式代码转换,同时兼容ISO格式:

SELECT 
    TRY_CONVERT(DATETIME, REPLACE(your_date_column, '  ', ' '), 100) AS standardized_date
FROM 
    your_table;

格式代码100对应mon dd yyyy hh:miAM/PM格式,TRY_CONVERT会自动匹配ISO格式的日期。

MySQL

方法1:CASE WHEN分支转换

通过判断日期字符串特征,分别调用对应格式的STR_TO_DATE:

SELECT 
    CASE
        WHEN your_date_column LIKE '%AM' OR your_date_column LIKE '%PM' 
            THEN STR_TO_DATE(your_date_column, '%b %d %Y  %h:%i%p')
        ELSE STR_TO_DATE(your_date_column, '%Y-%m-%d %H:%i:%s')
    END AS standardized_date
FROM 
    your_table;

方法2:弹性匹配(MySQL 8.0.19+)

利用STR_TO_DATE的%通配符忽略任意空格,同时兼容两种格式:

SELECT 
    IFNULL(
        STR_TO_DATE(your_date_column, '%b %d %Y %h:%i%p'),
        STR_TO_DATE(your_date_column, '%Y-%m-%d %H:%i:%s')
    ) AS standardized_date
FROM 
    your_table;

PostgreSQL

使用TO_TIMESTAMP函数,指定对应格式匹配英文月份格式,同时自动兼容ISO格式:

SELECT 
    TO_TIMESTAMP(your_date_column, 'Mon DD YYYY  HH12:MIAM') AS standardized_date
FROM 
    your_table;

如果需要更严谨的分支判断:

SELECT 
    CASE
        WHEN your_date_column ~* '^\w{3} \d{2} \d{4}  \d{1,2}:\d{2}[AP]M$'
            THEN TO_TIMESTAMP(your_date_column, 'Mon DD YYYY  HH12:MIAM')
        ELSE TO_TIMESTAMP(your_date_column, 'YYYY-MM-DD HH24:MI:SS')
    END AS standardized_date
FROM 
    your_table;

内容的提问来源于stack exchange,提问作者abhishek wasnik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 18:43:13