当我尝试运行以下查询时:
... WHERE `date` = DATE_ADD(NOW(), INTERVAL 10 HOUR)
它不起作用,所以我必须使用 $date = date("Y-m-d", strtotime('+10 hours'))
但为什么 date_add
不起作用?
非常感谢
最佳答案
请注意 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)
您可以使用 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)
测试用例:
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)
关于MySQL date_add() 在 WHERE 子句中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4098539/