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

如何编写SQL查询将nvarchar/字符串转换为日期类型?

处理混合日期与文本列的SQL转换方案

嘿,这个需求太常见啦——当你的表列里混着日期格式字符串和普通文本,只想把符合格式的日期转成标准的YYYY-MM-DD,其他内容原封不动保留。下面我针对几种主流数据库给出具体的SQL写法,你可以根据自己用的数据库来选:

MySQL 实现

MySQL里可以用STR_TO_DATE尝试转换,转换失败会返回NULL,再用IFNULL兜底取原字符串:

SELECT 
    IFNULL(STR_TO_DATE(comment, '%m/%d/%Y'), comment) AS comment
FROM usercomment;
  • STR_TO_DATE(comment, '%m/%d/%Y'):按照MM/DD/YYYY的格式尝试将字符串转成日期,不符合格式的会返回NULL
  • IFNULL(...):如果转换结果是NULL,就直接用原comment值,完美保留普通文本

PostgreSQL 实现

PostgreSQL 12及以上版本支持TRY_TO_DATE函数,转换失败返回NULL,结合TO_CHAR转成标准日期字符串:

SELECT 
    COALESCE(TO_CHAR(TRY_TO_DATE(comment, 'MM/DD/YYYY'), 'YYYY-MM-DD'), comment) AS comment
FROM usercomment;

如果是低于12的版本,可以先用正则表达式判断格式,再做转换:

SELECT 
    CASE 
        WHEN comment ~ '^\d{2}/\d{2}/\d{4}$' THEN TO_CHAR(TO_DATE(comment, 'MM/DD/YYYY'), 'YYYY-MM-DD')
        ELSE comment
    END AS comment
FROM usercomment;
  • 正则^\d{2}/\d{2}/\d{4}$用来匹配XX/XX/XXXX格式的字符串,确保只有符合日期格式的内容才会被转换

SQL Server 实现

用TRY_CONVERT尝试转换日期,成功后再转成标准格式的字符串,失败则保留原内容:

SELECT 
    COALESCE(CONVERT(VARCHAR, TRY_CONVERT(DATE, comment, 101), 23), comment) AS comment
FROM usercomment;
  • TRY_CONVERT(DATE, comment, 101):样式101对应MM/DD/YYYY格式,转换失败返回NULL
  • CONVERT(VARCHAR, ..., 23):将成功转换的日期转成YYYY-MM-DD格式的字符串
  • COALESCE:如果转换失败,就取原comment值

用上面的SQL跑你的测试数据,就能得到你想要的输出结果啦~

内容的提问来源于stack exchange,提问作者Phanindra Pothuri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:52:56