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

如何将同一数据列中多种格式的日期统一转换为yyyymmdd格式

问题原因

直接使用CONVERT(VARCHAR, [date-column], 112)无法得到预期结果的核心原因是:[date-column]列存储的是字符串类型值,而非标准的DATE/DATETIME日期类型。SQL Server的日期样式码仅对日期类型转字符串、或合规的单格式字符串转日期生效,无法直接对混合多格式的日期字符串直接做统一格式转换。

解决方案

需要先按不同格式把字符串解析为标准日期类型,再统一转换为yyyymmdd格式,参考实现如下:

SELECT
    -- 第二步:将解析完成的标准日期统一转换为yyyymmdd格式字符串
    CONVERT(VARCHAR(8), parsed_date, 112) AS unified_yyyymmdd_date
FROM (
    SELECT
        -- 第一步:按不同字符串格式匹配,解析为标准DATE类型
        CASE
            -- 匹配8位纯数字的原有yyyymmdd格式,直接转换
            WHEN [date-column] LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' 
                THEN CONVERT(DATE, [date-column], 112)
            -- 匹配斜杠分隔的mm/dd/yyyy格式,对应样式码101
            WHEN [date-column] LIKE '[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]'
                THEN CONVERT(DATE, [date-column], 101)
            -- 匹配横杠分隔的yyyy-mm-dd格式,对应样式码23
            WHEN [date-column] LIKE '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]'
                THEN CONVERT(DATE, [date-column], 23)
            -- 其余未覆盖的日期格式可按实际规则追加WHEN分支
            ELSE NULL
        END AS parsed_date
    FROM 你的实际表名
) t
注意事项
  • 正式使用前先梳理[date-column]列中所有存在的日期格式,将未覆盖的格式规则补充到CASE分支中,未匹配的内容会默认返回NULL
  • 斜杠分隔的日期需要先确认是月/日/年还是日/月/年规则,如果是英式的日/月/年格式,把对应分支的样式码从101替换为103即可
  • 建议后续将该列的数据类型修改为DATE类型,从根源上避免字符串混合存储日期带来的转换异常、计算错误等问题

内容的提问来源于stack exchange,提问作者Reus ellmy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:01:22