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

SQL中如何将混合格式日期统一为YYYY-MM-DD格式?

统一日期格式为YYYY-MM-DD的解决方法

问题根源

你的date列是字符串类型(如varchar),里面混合了两种日期格式:MM/DD/YYYY(如1/1/2020)和YYYY-MM-DD(如2022-01-01)。直接用CONVERT时,SQL无法自动识别所有格式,导致转换报错。

针对性解决方案

根据你使用的SQL数据库类型,选择对应方法:

适用于SQL Server

用TRY_CONVERT区分可直接转换的格式,再单独处理斜杠分隔的日期:

SELECT 
    CASE
        -- 先尝试直接转换为日期,再格式化目标格式
        WHEN TRY_CONVERT(date, date_col) IS NOT NULL 
            THEN FORMAT(TRY_CONVERT(date, date_col), 'yyyy-MM-dd')
        -- 处理MM/DD/YYYY格式的字符串(样式代码101对应该格式)
        WHEN CHARINDEX('/', date_col) > 0
            THEN FORMAT(CONVERT(date, date_col, 101), 'yyyy-MM-dd')
        ELSE date_col -- 保留无法转换的原始值,可按需调整
    END AS standardized_date
FROM your_table;

适用于MySQL

用STR_TO_DATE指定格式解析,再统一输出为YYYY-MM-DD:

SELECT 
    CASE
        WHEN date_col LIKE '%/%'
            THEN DATE_FORMAT(STR_TO_DATE(date_col, '%m/%d/%Y'), '%Y-%m-%d')
        ELSE DATE_FORMAT(STR_TO_DATE(date_col, '%Y-%m-%d'), '%Y-%m-%d')
    END AS standardized_date
FROM your_table;

永久更新表中数据

如果需要彻底修正表内数据,可执行更新语句:

-- SQL Server版本
UPDATE your_table
SET date_col = FORMAT(
    CASE
        WHEN CHARINDEX('/', date_col) > 0
            THEN CONVERT(date, date_col, 101)
        ELSE CONVERT(date, date_col)
    END, 'yyyy-MM-dd');

-- MySQL版本
UPDATE your_table
SET date_col = CASE
    WHEN date_col LIKE '%/%'
        THEN DATE_FORMAT(STR_TO_DATE(date_col, '%m/%d/%Y'), '%Y-%m-%d')
    ELSE date_col
END;

额外建议

最好将date列的类型修改为date类型,后续存储时自动规范格式,从根源避免混合格式问题。

内容的提问来源于stack exchange,提问作者Red Sus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:51:17