如果我使用具有无效日期的 INTERVAL 关键字,MySQL 的行为如何?

实际上,MySQL 的行为取决于allow_invalid_dates模式。如果启用此模式,则 MySQL 将接受无效日期,并且它将执行日期算术,就像它对有效日期执行的那样。否则,如果此模式处于非活动状态,则它将不接受无效日期并将产生 NULL 作为输出。

mysql> select '2017-02-30' + INTERVAL 7 day;
+-------------------------------+
| '2017-02-30' + INTERVAL 7 day |
+-------------------------------+
| NULL                          |
+-------------------------------+
1 row in set, 1 warning (0.00 sec)

现在启用allow_invalid_date模式后,MySQL 接受无效日期并按如下方式执行日期算术 -

mysql> set sql_mode = allow_invalid_dates;

mysql> select '2017-02-30' + INTERVAL 7 day;
+-------------------------------+
| '2017-02-30' + INTERVAL 7 day |
+-------------------------------+
| 2017-03-09                    |
+-------------------------------+
1 row in set (0.00 sec)

mysql> select '2017-11-31' + INTERVAL 7 day;
+-------------------------------+
| '2017-11-31' + INTERVAL 7 day |
+-------------------------------+
| 2017-12-08                    |
+-------------------------------+
1 row in set (0.00 sec)

猜你喜欢