MySQL DATE_ADD将日期转换为0?

时间:2017-06-05 18:06:20

标签: mysql sql date

任何指针都会受到赞赏!我无法发现语法有什么问题,没有在SO上找到答案,所以我在这里发布我的问题。提前谢谢!

这是我试过的:

mysql> select DATE_ADD(start_date, INTERVAL 2 week), DATE_ADD(end_date, 
INTERVAL 2 week) from lists where id=1;
+---------------------------------------+------------------------------
-------+
| DATE_ADD(start_date, INTERVAL 2 week) | DATE_ADD(end_date, INTERVAL 2 
week) |
+---------------------------------------+------------------------------
-------+
| 2017-05-28                            | 2017-06-11                          
|
+---------------------------------------+------------------------------
-------+

结果看起来正确。然后我试了一下:

mysql> update lists set start_date=DATE_ADD(start_date, INTERVAL 2 WEEK) and 
end_date=DATE_ADD(end_date, INTERVAL 2 WEEK) where id=1;
ERROR 1292 (22007): Incorrect date value: '0' for column 'start_date' at row 
1

对SO做了一些研究,有些答案指向严格的模式。但是为了触发严格模式错误,计算日期首先需要为0,我无法看到上述语法如何导致DATE_ADD这样做。

只是为了测试,我尝试了这个:

mysql> update ignore lists set start_date=DATE_ADD(start_date, 
INTERVAL 2 week) and end_date=DATE_ADD(end_date, INTERVAL 2 week) where 
id=1;
Query OK, 1 row affected, 1 warning (0.02 sec)

它给出了这个结果:

mysql> select start_date, end_date from lists where id=1;
+------------+------------+
| start_date | end_date   |
+------------+------------+
| 0000-00-00 | 2017-05-28 |
+------------+------------+

如何???

提前再次感谢。

1 个答案:

答案 0 :(得分:0)

糟糕!你有and你应该有一个逗号。

 update lists 
    set start_date=DATE_ADD(start_date, INTERVAL 2 WEEK),
        end_date=DATE_ADD(end_date, INTERVAL 2 WEEK)
  where id=1;

and是一个返回01的布尔运算符。所以MySQL的解析器不会阻塞它,而是试图评估它。因此你的零。

我讨厌这种情况。