MySQL文本列转日期列报错Error Code:1292解决方案咨询
解决MySQL中dd/mm/yyyy格式字符串转日期类型的错误问题
嘿,这个坑我之前踩过好多次!你现在用错函数啦——DATE_FORMAT()是用来把日期类型数据转换成指定格式的字符串的,而你现在需要的是把字符串格式的日期解析成MySQL能识别的DATE类型,这时候得用STR_TO_DATE()函数才对。
错误原因分析
你原来执行的语句:
UPDATE table SET arrival = DATE_FORMAT(arrival_date, "%d-%m-%Y")
这里的问题在于,DATE_FORMAT()的第一个参数需要是日期/时间类型,但你传入的是dd/mm/yyyy格式的字符串(比如'20/01/2018'),MySQL默认无法识别这种格式的字符串作为合法的日期输入,所以直接抛出了Error Code: 1292的错误。
正确的解决方案
用STR_TO_DATE()函数来解析你的字符串,指定它的原始格式为%d/%m/%Y,这样就能将字符串转换成标准的DATE类型,直接存入arrival列:
UPDATE your_table_name SET arrival = STR_TO_DATE(arrival_date, "%d/%m/%Y");
注意:把your_table_name替换成你实际的表名哦
额外的容错技巧
如果你的arrival_date列里可能存在无效的日期字符串(比如'32/01/2018'这种不存在的日期),可以添加过滤条件避免整表更新失败:
UPDATE your_table_name SET arrival = STR_TO_DATE(arrival_date, "%d/%m/%Y") WHERE STR_TO_DATE(arrival_date, "%d/%m/%Y") IS NOT NULL;
要是你的MySQL版本是8.0及以上,还可以用TRY_STR_TO_DATE()函数,它会自动把无效的日期字符串转换成NULL,而不是直接报错:
UPDATE your_table_name SET arrival = TRY_STR_TO_DATE(arrival_date, "%d/%m/%Y");
小总结
记住这两个函数的区别就不会再踩坑啦:
STR_TO_DATE(字符串, 原始格式):把字符串转成日期类型DATE_FORMAT(日期, 目标格式):把日期类型转成指定格式的字符串
内容的提问来源于stack exchange,提问作者A.D
相关产品推荐
相关产品推荐

