當我嘗試運行下面的查詢:MySQL date_add()在WHERE子句中不起作用?
... WHERE `date` = DATE_ADD(NOW(), INTERVAL 10 HOUR)
它不工作,所以我必須使用$date = date("Y-m-d", strtotime('+10 hours'))
但爲什麼date_add
不起作用?
感謝很多
當我嘗試運行下面的查詢:MySQL date_add()在WHERE子句中不起作用?
... 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)
你跟DATE比較日期時間(的DATE_ADD
結果)。您需要WHERE date = DATE(DATE_ADD(NOW(), INTERVAL 10 HOUR))
此:
WHERE date = DATE_ADD(NOW(), INTERVAL 10 HOUR)
...不工作(假設date
是DATETIME ), but it includes the time portion when the statement was executed -- the
date`值需要匹配正是要返回
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)
我不認爲''CURRENT_DATE()'將在那裏爲OP工作。 'DATE_ADD()'函數仍然返回時間部分的時間戳。 – 2010-11-04 16:07:01
你說得對。我掩蓋了PHP部分的問題,但現在我再次閱讀它,我認爲你的答案是正確的方法。 OP想要「現在10個小時是星期幾?」,而不是「今天10點」 – 2010-11-04 16:23:34
你得到一個SQL錯誤,或者它只是不會返回預期值? – Gazillion 2010-11-04 15:58:48