当我尝试运行以下查询时:
... WHERE `date` = DATE_ADD(NOW(), INTERVAL 10 HOUR)
它不起作用,所以我必须使用$date = date("Y-m-d", strtotime('+10 hours'))
但为什么date_add
不起作用?
非常感谢
答案 0 :(得分: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)
您可以改为使用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)
答案 1 :(得分:3)
NOW()
是时间戳,而不是日期。
示例:
mysql> select now(), current_date();
+---------------------+----------------+
| now() | current_Date() |
+---------------------+----------------+
| 2010-11-04 12:00:01 | 2010-11-04 |
+---------------------+----------------+
我认为这就是你想要的:
... WHERE date = DATE_ADD(CURRENT_DATE(), INTERVAL 10 HOUR)
答案 2 :(得分:1)
您将DateTime(DATE_ADD
的结果)与DATE进行比较。您需要WHERE date = DATE(DATE_ADD(NOW(), INTERVAL 10 HOUR))
答案 3 :(得分:1)
此:
WHERE date = DATE_ADD(NOW(), INTERVAL 10 HOUR)
...确实有效(假设date
是DATETIME ), but it includes the time portion when the statement was executed -- the
日期`值需要匹配要返回的 。
答案 4 :(得分:0)
我知道这已经得到了回答,但在这个用例中有一个更好的解决方案:
DATE_ADD(TODAY(), INTERVAL 10 HOUR)
这删除了一个额外的操作,因为 TODAY
返回没有时间部分的日期。