如何将格式为YYYY-MM/DD的appt_date字段转换为YYYY-MM-DD格式
解决方案
首先确认你当前存储的字符串格式为YYYY-MM/DD,仅需替换字符串内的斜杠为横杠即可完成格式转换,以下是不同数据库的可执行方案:
场景1:仅需转换为YYYY-MM-DD格式的字符串
验证转换效果(先执行确认结果符合预期,再跑更新语句)
- MySQL/PostgreSQL
SELECT appt_date, REPLACE(appt_date, '/', '-') AS converted_date FROM 你的表名 LIMIT 10;
- SQL Server
SELECT TOP 10 appt_date, REPLACE(appt_date, '/', '-') AS converted_date FROM 你的表名;
执行批量更新
所有主流数据库的替换语法通用:
UPDATE 你的表名 SET appt_date = REPLACE(appt_date, '/', '-');
如果之前执行REPLACE没有生效,可排查是否存在全角斜杠(/)或隐藏空格,兼容全角斜杠的更新语句如下:
UPDATE 你的表名 SET appt_date = REPLACE(REPLACE(TRIM(appt_date), '/', '-'), '/', '-');
场景2:转换后需要将字段改为日期类型(推荐,方便后续日期计算、排序等操作)
先完成上面的字符串格式替换,再执行字段类型修改,操作前需排查所有非法格式数据:
排查非法数据
- MySQL
SELECT appt_date FROM 你的表名 WHERE appt_date NOT REGEXP '^[0-9]{4}-[0-9]{2}-[0-9]{2}$';
- SQL Server
SELECT appt_date FROM 你的表名 WHERE ISDATE(appt_date) = 0;
- PostgreSQL
SELECT appt_date FROM 你的表名 WHERE appt_date !~ '^\\d{4}-\\d{2}-\\d{2}$' OR to_date(appt_date, 'YYYY-MM-DD') IS NULL;
修改字段为日期类型
- MySQL
ALTER TABLE 你的表名 MODIFY COLUMN appt_date DATE;
- SQL Server
ALTER TABLE 你的表名 ALTER COLUMN appt_date DATE;
- PostgreSQL
ALTER TABLE 你的表名 ALTER COLUMN appt_date TYPE DATE USING appt_date::DATE;
注意事项
- 所有修改操作执行前务必备份全表数据,避免错误操作无法回滚
- 必须先执行SELECT验证转换结果,确认符合预期后再执行UPDATE、ALTER等写操作
内容的提问来源于stack exchange,提问作者sqlrobert
相关产品推荐
相关产品推荐

