MySQL date_add()在WHERE子句中不起作用?

Sim*_*mon 3 mysql phpmyadmin

当我尝试运行以下查询时:

... WHERE `date` = DATE_ADD(NOW(), INTERVAL 10 HOUR)
Run Code Online (Sandbox Code Playgroud)

它不起作用,所以我必须使用 $date = date("Y-m-d", strtotime('+10 hours'))

但为什么date_add不起作用?

非常感谢

Dan*_*llo 9

请注意,DATE_ADD()除日期外,函数还会返回时间部分.这与使用php date("Y-m-d", strtotime('+10 hours'))只是一样,它只返回日期部分.

SELECT DATE_ADD(NOW(), INTERVAL 10 HOUR);
+-----------------------------------+
| DATE_ADD(NOW(), INTERVAL 10 HOUR) |
+-----------------------------------+
| 2010-11-05 01:59:51               |
+-----------------------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

你可以WHERE date = DATE(DATE_ADD(NOW(), INTERVAL 10 HOUR))改用:

SELECT DATE(DATE_ADD(NOW(), INTERVAL 10 HOUR));
+-----------------------------------------+
| DATE(DATE_ADD(NOW(), INTERVAL 10 HOUR)) |
+-----------------------------------------+
| 2010-11-05                              |
+-----------------------------------------+
1 row in set (0.02 sec)
Run Code Online (Sandbox Code Playgroud)

测试用例:

CREATE TABLE tbl (id int, date datetime);

INSERT INTO tbl VALUES (1, '2010-11-04');
INSERT INTO tbl VALUES (2, '2010-11-05');
INSERT INTO tbl VALUES (3, '2010-11-06');
INSERT INTO tbl VALUES (4, '2010-11-07');

SELECT * FROM tbl WHERE date = DATE(DATE_ADD(NOW(), INTERVAL 10 HOUR));
+------+---------------------+
| id   | date                |
+------+---------------------+
|    2 | 2010-11-05 00:00:00 |
+------+---------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)