J'ai une question: Est-il possible de sélectionner une base de données MySQL en comparant une chaîne DATE "2010-04-29" à des chaînes stockées sous le nom 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.
Utilisez le suivant:
SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29'
Juste pour référence, j'ai une table d'enregistrement de 2 millions de dollars, j'ai lancé une requête similaire. Salils réponse a pris 4,48 secondes, ce qui précède a pris 2,25 secondes.
Donc, si le tableau est grand, je le suggérerais plutôt.
Si vous souhaitez sélectionner toutes les lignes pour lesquelles la partie DATE d'une colonne DATETIME correspond à un littéral donné, vous ne pouvez pas le faire comme ceci:
WHERE startTime = '2010-04-29'
parce que MySQL ne peut pas comparer directement une DATE et une DATETIME. Ce que MySQL fait, il étend le littéral DATE donné avec le temps '00: 00: 00 '. Donc, votre état devient
WHERE startTime = '2010-04-29 00:00:00'
Certainement pas ce que vous voulez!
La condition est une plage et par conséquent elle devrait être donnée comme plage. Il y a plusieurs possibilités:
WHERE startTime BETWEEN '2010-04-29 00:00:00' AND '2010-04-29 23:59:59'
WHERE startTime >= '2010-04-29' AND startTime < ('2010-04-29' + INTERVAL 1 DAY)
La première possibilité que le premier se trompe est minime - lorsque votre colonne DATETIME utilise une résolution inférieure à la seconde et qu'il existe 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 s'agrandira.
SELECT * FROM `calendar` WHERE DATE_FORMAT(startTime, "%Y-%m-%d") = '2010-04-29'"
OR
SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29'
SELECT * FROM sample_table WHERE last_visit = DATE_FORMAT('2014-11-24 10:48:09','%Y-%m-%d %H:%i:%s')
ceci pour le format de date et heure dans mysql en utilisant DATE_FORMAT(date,format)
.
SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29';
cela aide, vous pouvez convertir les valeurs en tant que DATE
avant de comparer.