2010-11-04 5 views
2

Lorsque je tente d'exécuter la requête suivante:MySQL date_add() ne fonctionne pas dans la clause WHERE?

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

Il ne fonctionne pas, donc je dois utiliser le $date = date("Y-m-d", strtotime('+10 hours'))

Mais pourquoi date_add ne fonctionne pas?

Merci beaucoup

+1

-vous obtenez une erreur SQL ou juste ne pas retourner la valeur que vous attendiez? – Gazillion

Répondre

8

Notez que DATE_ADD() fonction retourne une partie de temps en plus de la date.Ce n'est pas la même chose que l'utilisation date("Y-m-d", strtotime('+10 hours')) de php, qui ne renvoie que la partie de date.

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) 

Vous pouvez utiliser WHERE date = DATE(DATE_ADD(NOW(), INTERVAL 10 HOUR)) à la place:

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) 

cas de test:

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

Vous comparer DateTime (résultat de DATE_ADD) avec DATE. Vous avez besoin WHERE date = DATE(DATE_ADD(NOW(), INTERVAL 10 HOUR))

1

ceci:.

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

... ne fonctionne (en supposant date est DATETIME ), but it includes the time portion when the statement was executed -- the valeurs Date` doivent correspondre exactement que à retourner

3

NOW() est un horodatage, pas une date.

Exemple:

mysql> select now(), current_date(); 
+---------------------+----------------+ 
| now()    | current_Date() | 
+---------------------+----------------+ 
| 2010-11-04 12:00:01 | 2010-11-04  | 
+---------------------+----------------+ 

Je pense que c'est ce que vous voulez:

... WHERE date = DATE_ADD(CURRENT_DATE(), INTERVAL 10 HOUR) 
+0

Je ne pense pas que 'CURRENT_DATE()' fonctionnera pour l'OP là-dedans. La fonction 'DATE_ADD()' renvoie toujours un horodatage avec la partie heure. –

+0

Vous avez raison. J'ai glissé sur la partie PHP de la question, mais maintenant que je l'ai relue, je pense que votre réponse est la bonne approche. L'OP veut "quel jour est-il dans 10 heures à partir de maintenant?", Pas "10:00 aujourd'hui" –