J'ai une question: est-il possible de sélectionner dans une base de données MySQL en comparant une chaîne DATE "2010-04-29" avec des chaînes qui sont stockées comme DATETIME (2010-04-29 10:00)?
J'ai un sélecteur de date qui filtre les données et je voudrais interroger la table par le champ DATETIME comme ceci:
SELECT * FROM `calendar` WHERE startTime = '2010-04-29'"
... et j'aimerais obtenir la ligne dont la valeur DATETIME est "2010-04-29 10:00".
Aucune suggestion? Merci.
mysql
datetime
comparison
Manny Calavera
la source
la source
startTime
est indexée.Si vous souhaitez sélectionner toutes les lignes où la partie DATE d'une colonne DATETIME correspond à un certain littéral, vous ne pouvez pas le faire comme ceci:
car MySQL ne peut pas comparer directement une DATE et une DATETIME. Ce que fait MySQL, il étend le littéral DATE donné avec l'heure «00: 00: 00». Alors ta condition devient
Certainement pas ce que vous voulez!
La condition est une plage et doit donc être donnée comme plage. Il existe plusieurs possibilités:
Il y a une petite possibilité pour le premier de se tromper - lorsque votre colonne DATETIME utilise une résolution inférieure à la seconde et qu'il y a un rendez-vous à 23:59:59 + epsilon. En général, je suggère d'utiliser la deuxième variante.
Les deux variantes peuvent utiliser un index sur startTime qui deviendra important lorsque la table grandira.
la source
date()
,year()
,datediff()
ou tout similaire)00:00:00
. maintenant mes résultats ont du sensOU
la source
ceci pour le format datetime dans mysql en utilisant
DATE_FORMAT(date,format)
.la source
cela aide, vous pouvez convertir les valeurs comme
DATE
avant de comparer.la source
Vous pouvez convertir le champ DATETIME en DATE comme suit:
C'est très efficace.
la source
startTime
est indexéVous pouvez également utiliser des opérateurs de comparaison sur les dates MySQL si vous voulez trouver quelque chose après ou avant. C'est parce qu'ils sont écrits de telle manière (valeur la plus grande à la plus petite avec des zéros non significatifs) qu'un simple tri par chaîne les trie correctement.
la source