5 votes

SQL SELECT * FROM datetime = CURDATE() return an empty result set

Quelqu'un peut-il me dire où est mon erreur? En utilisant cette requête, cela devrait renvoyer des lignes où les données ont datetime = '2012-10-12' non? Voici ma référence

Ma colonne datetime = 'YYYY-MM-DD HH:MM:SS', type de données = datetime.

Je utilise XAMPP v1.8.0, MySQL v5.5.25a.

12voto

John Woo Points 132738

Essayez de CASTer datetime en date en utilisant DATE()

SELECT * 
FROM tableName
WHERE DATE(`datetime`) = DATE(CURDATE())

YYYY-MM-DD HH:MM:SS n'est pas égal à YYYY-MM-DD

2012-01-01 12:12:12 n'est pas égal à 2012-01-01 00:00:00

6voto

Alain Collins Points 3212

Ne pas utiliser de fonctions sur vos colonnes, par exemple DATE(datetime) - mysql ne peut pas utiliser votre index.

Il est presque certainement préférable d'utiliser une plage :

WHERE `datetime` entre '2012-01-01 00:00:00' et '2012-01-01 23:59:59'

ou stockez simplement la partie DATE dans une colonne distincte (qui aura une cardinalité plus faible et sera mieux traitée par l'optimiseur).

3voto

filmer.cz Points 31
SÉLECTIONNER * DE tableName WHERE DATE(datetime) = CURDATE()

1voto

Dalpat Singh Points 31

Utilisez DATE() de mysql pour formater le TIMESTAMP en DATE

Sélectionnez * FROM tablename WHERE DATE(colname) = CURDATE()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X