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
相关产品推荐
相关产品推荐

