MySQL中STR_TO_DATE报错:如何将VARCHAR日期转为yyyy-mm-dd?
解决VARCHAR日期转MySQL标准格式问题
你的错误根源是STR_TO_DATE函数的格式掩码和原始日期字符串不匹配,原始字符串是6/25/2024 5:19:22 PM这种月/日/年+12小时制时间的格式,需要对应正确的格式符。
正确的转换语句
如果你只需要提取日期部分转成yyyy-mm-dd格式(对应DATE类型),可以用以下语句:
UPDATE 你的表名 SET CreatedDate = DATE_FORMAT(STR_TO_DATE(CreatedDate, '%m/%d/%Y %h:%i:%s %p'), '%Y-%m-%d');
如果需要保留完整的datetime格式(转成yyyy-mm-dd hh:mm:ss),用这个:
UPDATE 你的表名 SET CreatedDate = STR_TO_DATE(CreatedDate, '%m/%d/%Y %h:%i:%s %p');
格式符说明
%m:两位数字的月份(01-12),兼容单数字月份(比如6)%d:两位数字的日期(01-31)%Y:四位数字的年份%h:12小时制的小时(01-12)%i:两位数字的分钟(00-59)%s:两位数字的秒(00-59)%p:AM/PM标识,自动匹配大小写(PM/pm都可识别)
后续优化建议
等所有数据转换验证正确后,建议把字段改回DATE或DATETIME类型,避免后续格式问题:
-- 转成DATE类型(仅存储日期) ALTER TABLE 你的表名 MODIFY COLUMN CreatedDate DATE; -- 或者转成DATETIME类型(存储日期+时间) ALTER TABLE 你的表名 MODIFY COLUMN CreatedDate DATETIME;
内容的提问来源于stack exchange,提问作者John Beasley
相关产品推荐
相关产品推荐

