2010-11-04 389 views
2

當我嘗試運行下面的查詢:MySQL date_add()在WHERE子句中不起作用?

... WHERE `date` = DATE_ADD(NOW(), INTERVAL 10 HOUR) 

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

但爲什麼date_add不起作用?

感謝很多

+1

你得到一個SQL錯誤,或者它只是不會返回預期值? – Gazillion 2010-11-04 15:58:48

回答

8

注意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

你跟DATE比較日期時間(的DATE_ADD結果)。您需要WHERE date = DATE(DATE_ADD(NOW(), INTERVAL 10 HOUR))

1

此:

WHERE date = DATE_ADD(NOW(), INTERVAL 10 HOUR) 

...不工作(假設date是DATETIME ), but it includes the time portion when the statement was executed -- the date`值需要匹配正是要返回

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) 
+0

我不認爲''CURRENT_DATE()'將在那裏爲OP工作。 'DATE_ADD()'函數仍然返回時間部分的時間戳。 – 2010-11-04 16:07:01

+0

你說得對。我掩蓋了PHP部分的問題,但現在我再次閱讀它,我認爲你的答案是正確的方法。 OP想要「現在10個小時是星期幾?」,而不是「今天10點」 – 2010-11-04 16:23:34