You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:33:24