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


实际上,MySQL 的行为取决于 allow_invalid_dates 模式。如果此模式启用,则 MySQL 将接受无效日期并且会执行日期算法,就像对有效日期执行算法一样。否则,如果此模式未激活,则 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;
Query OK, 0 rows affected (0.05 sec)

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)

更新日期:2019 年 7 月 30 日

114 次浏览

开启您的 职业生涯

完成课程取得认证

入门
广告