MySQL中如何将DD/MM/YYYY格式文本转换为YYYY-MM-DD日期格式
解决方案
步骤1:新增存储标准格式日期的列
优先新增独立列不修改原有列,既不影响历史数据,也能适配后续持续导入非标准格式CSV的需求。
通用新增列语法如下:
ALTER TABLE 你的表名 ADD COLUMN 标准日期列 DATE;
如果你的数据库场景更适合存字符串格式的日期,可以把列类型换成CHAR(10),优先推荐用DATE类型方便后续做日期计算、筛选等操作
注意:执行全表更新操作前,建议先备份整张表,避免转换异常导致数据丢失。
步骤2:批量转换历史数据填充新列
根据你使用的数据库类型选择对应转换语法:
- MySQL / MariaDB 环境
用STR_TO_DATE函数匹配DD/MM/YYYY格式完成转换:
UPDATE 你的表名 SET 标准日期列 = STR_TO_DATE(原有非标准日期文本列, '%d/%m/%Y');
如果新列是字符串类型,额外加一层DATE_FORMAT输出指定格式:
UPDATE 你的表名 SET 标准日期字符串列 = DATE_FORMAT(STR_TO_DATE(原有非标准日期文本列, '%d/%m/%Y'), '%Y-%m-%d');
- PostgreSQL 环境
用TO_DATE函数转换:
UPDATE 你的表名 SET 标准日期列 = TO_DATE(原有非标准日期文本列, 'DD/MM/YYYY');
存字符串的话用TO_CHAR格式化输出:
UPDATE 你的表名 SET 标准日期字符串列 = TO_CHAR(TO_DATE(原有非标准日期文本列, 'DD/MM/YYYY'), 'YYYY-MM-DD');
- SQL Server 环境
用CONVERT函数,格式码103对应DD/MM/YYYY输入格式:
UPDATE 你的表名 SET 标准日期列 = CONVERT(DATE, 原有非标准日期文本列, 103);
存字符串的话用格式码23输出YYYY-MM-DD格式:
UPDATE 你的表名 SET 标准日期字符串列 = CONVERT(VARCHAR(10), CONVERT(DATE, 原有非标准日期文本列, 103), 23);
步骤3:后续导入新CSV时自动处理
不用每次导入后手动执行更新,可以在导入阶段直接完成转换,以MySQL LOAD DATA导入为例:
LOAD DATA INFILE '你的CSV文件本地路径' INTO TABLE 你的表名 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS -- 忽略CSV表头行,没有表头可以删掉这行 (@temp_date, 其他列1, 其他列2) -- 把CSV里的非标准日期先读到临时变量 SET 原有非标准日期文本列 = @temp_date, 标准日期列 = STR_TO_DATE(@temp_date, '%d/%m/%Y');
可选校验步骤
可以查询转换失败的脏数据,手动修正异常值:
-- MySQL环境示例,其他数据库可以替换为对应转换函数判断空值 SELECT * FROM 你的表名 WHERE STR_TO_DATE(原有非标准日期文本列, '%d/%m/%Y') IS NULL AND 原有非标准日期文本列 IS NOT NULL;
内容的提问来源于stack exchange,提问作者claudia silva
相关产品推荐
相关产品推荐

