DB2转MySQL:PHP脚本中DATE_ADD函数使用报错问题
解决MySQL INSERT语句的语法错误问题
嘿,我帮你分析下这条INSERT语句的问题,主要有两个关键错误需要修正:
- VALUES子句里不能用AS别名:你写的
AS expire_date完全多余,而且是语法错误——VALUES只需要直接提供要插入的数值/表达式,别名在这里没有任何作用,直接删掉就好。 - CONVERT函数的用法冗余(甚至可能出错):如果你的
:SHIPDATE是MySQL能识别的日期格式(比如'YYYY-MM-DD'),根本不需要先转成CHAR再格式化;如果它是DB2那种YYYYMMDD格式的字符串/数字,用STR_TO_DATE转成日期会更直接。
下面给你几个修正后的版本,根据你的实际数据情况选择:
情况1::SHIPDATE是标准日期格式(如'2018-01-01')
直接用DATE_ADD处理就行,最简洁:
INSERT INTO `table` (column1) VALUES(DATE_ADD(:SHIPDATE, INTERVAL 127 DAY));
情况2::SHIPDATE是YYYYMMDD格式的字符串/数字(如'20180101')
先转成日期再计算:
INSERT INTO `table` (column1) VALUES(DATE_ADD(STR_TO_DATE(:SHIPDATE, '%Y%m%d'), INTERVAL 127 DAY));
情况3:一定要保留DATE_FORMAT的写法(不推荐,除非有特殊需求)
如果坚持要先转字符串再格式化,调整CONVERT的写法(MySQL里转字符串不需要指定长度CHAR(20)):
INSERT INTO `table` (column1) VALUES(DATE_ADD(DATE_FORMAT(CONVERT(:SHIPDATE, CHAR), '%Y-%m-%d'), INTERVAL 127 DAY));
另外提醒下:table是MySQL的保留字,最好用反引号`把它括起来,避免不必要的语法冲突。
你可以先单独运行SELECT测试表达式是否正确,比如:
SELECT DATE_ADD(STR_TO_DATE('20180101', '%Y%m%d'), INTERVAL 127 DAY);
确认输出的过期日期符合预期后,再放到INSERT语句里执行就没问题啦。
内容的提问来源于stack exchange,提问作者Geoff_S
相关产品推荐
相关产品推荐

