如果我将 INTERVAL 关键字与无效日期结合使用,MySQL 会如何表现?

mysqlmysqli database

实际上,MySQL 的行为取决于 allow_invalid_dates 模式。如果启用此模式,则 MySQL 将接受无效日期,并像处理有效日期一样执行日期算术。否则,如果此模式未激活,则它将不接受无效日期并产生 NULL 作为输出。

mysql> select '2017-02-30' + INTERVAL 7 day;
+-------------------------------+
| '2017-02-30' + INTERVAL 7 day |
+-------------------------------+
| NULL |
+-------------------------------+
1 行在集合中,1 个警告(0.00 秒)

现在启用 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)

相关文章