Workbench中DATE_ADD函数异常:插入触发Error 1292日期值错误
解决MySQL Error 1292: Incorrect datetime value '0'的问题
你遇到的问题核心在于用错了转换函数——DATE_ADD()根本不是用来将数字格式的日期转换为DATE类型的工具,这才导致MySQL解析出无效的'0'日期值触发错误。
为什么DATE_ADD会出错?
DATE_ADD()的作用是对一个合法的日期/时间值进行加减操作,它的第一个参数必须是有效的日期(比如'2016-02-02'),第二个参数是时间间隔(比如INTERVAL 1 DAY)。你把int类型的20160202传给它,MySQL会尝试把这个数字解析成日期,最终得到无效的'0',自然触发1292错误。
正确的转换方法:用STR_TO_DATE()
针对你这种int类型的日期(格式为YYYYMMDD),应该使用STR_TO_DATE()函数来完成转换,它可以按照指定的格式把字符串(或自动转字符串的数字)转换成合法的DATE值。
示例插入语句:
INSERT INTO 你的目标表(date_col1, date_col2) SELECT STR_TO_DATE(p.date, '%Y%m%d'), STR_TO_DATE(p.other_date_col, '%Y%m%d') FROM 你的源表 p;
这里的%Y%m%d对应你源数据的格式:%Y是4位年份,%m是2位月份,%d是2位日期,完美匹配20160202这种数字格式。
额外提示
- 你可以先单独运行SELECT语句验证转换结果:
SELECT STR_TO_DATE(20160202, '%Y%m%d');
应该返回2016-02-02,这就是符合要求的DATE格式。
2. 如果源数据里存在无效的日期数字(比如20160230,二月没有30号),插入还是会报错。如果你用的是MySQL 8.0及以上版本,可以用NULL ON CONVERSION ERROR选项把无效值转为NULL,避免整批插入失败:
SELECT STR_TO_DATE(p.date, '%Y%m%d') NULL ON CONVERSION ERROR FROM 你的源表 p;
内容的提问来源于stack exchange,提问作者H.Norman
相关产品推荐
相关产品推荐

