2011-06-10 4 views
4

Quel est le problème avec ce SQL?
Il semble que cela devrait fonctionner, mais ce n'est pas le cas.Pourquoi cette requête ne sélectionne aucune ligne

utc_time est un champ datetime.

SELECT id 
FROM `foo` 
WHERE utc_time > now() 
AND utc_time <= DATE_ADD(curdate(),INTERVAL 24 day); 

Expliquer que la clause Where est impossible.

utc_time est de type datetime. Voici un exemple de valeur utc_time: 2011-06-21 00:45:00

+6

Que vous dit MySQL? Sans une erreur, je vais aller de l'avant et blâmer Gremlins ou Satan ou quelque chose. –

+2

Veuillez donner un exemple de valeur pour utc_time et now() où vous pensez qu'il devrait être sélectionné, mais ce n'est pas le cas. –

+1

est utc_time une colonne dans votre requête, ou appelez-vous la fonction 'utc_time()' est ainsi, ce n'est pas ruby, vous avez besoin de '()'. Si c'est le nom de la colonne, je parie que vous l'avez mis en tant que datetime ... – colinross

Répondre

2

utc_time() est un built-in function. Même sans les crochets, utc_time renvoie toujours l'heure UTC en cours.

Echappez de la colonne nommée utc_time. Cela fonctionne (je l'ai testé):

SELECT id 
FROM `foo` 
WHERE `utc_time` > now() 
AND `utc_time` <= DATE_ADD(curdate(),INTERVAL 24 day); 

Encore un autre exemple des raisons pour lesquelles il est une mauvaise idée d'utiliser des mots ou des noms de fonction réservés comme noms des colonnes/tables.

+0

Vous l'avez eu !!! Merci beaucoup. Cela me rendait fou. Il est temps de changer ce nom de colonne. :-) – sqlman

Questions connexes