Soyez prudent avec BETWEEN, car les deux valeurs minet maxsont considérées comme étant dans la plage, pour ne pas traiter deux fois une date qui est la valeur minet max(cas de bord). Par exemple, la date 2010-09-29 00:00:00sera comprise entre 2010-09-28 00:00:00et2010-09-29 00:00:00 , ET AUSSI entre 2010-09-29 00:00:00et2010-09-30 00:00:00
minipif
oui, ce qu'il a dit ^^
Albert Rannetsperger
Réponses:
472
Votre deuxième date est antérieure à votre première date (c'est-à-dire que vous interrogez entre le 29 septembre 2010 et le 30 janvier 2010). Essayez d'inverser l'ordre des dates:
vous pouvez ajouter une explication pour que les gens comprennent ce que vous faites.
Franz Gleichmann
7
Comme extension à la réponse de @sabin et un indice si l'on veut comparer la partie date uniquement (sans l'heure):
Si le champ à comparer est du type datetime et que seules les dates sont spécifiées pour la comparaison, ces dates sont converties en interne en valeurs datetime . Cela signifie que la requête suivante
Vous pouvez le faire manuellement, en comparant avec supérieur ou égal et inférieur ou égal.
select*from table_name where created_at_column >= lower_date and created_at_column <= upper_date;
Dans notre exemple, nous devons récupérer des données d'un jour en particulier. Nous comparerons du début de la journée à la dernière seconde d'un autre jour.
select*from table_name where created_at_column >='2018-09-01 00:00:00'and created_at_column <='2018-09-05 23:59:59';
Peut-être un problème avec la configuration de la date côté serveur ou côté client. J'ai trouvé que c'était un problème commun sur plusieurs bases de données lorsque l'hôte est configuré en espagnol, français ou autre ... qui pourrait affecter le format jj / mm / aaaa ou mm / jj / aaaa.
min
etmax
sont considérées comme étant dans la plage, pour ne pas traiter deux fois une date qui est la valeurmin
etmax
(cas de bord). Par exemple, la date2010-09-29 00:00:00
sera comprise entre2010-09-28 00:00:00
et2010-09-29 00:00:00
, ET AUSSI entre2010-09-29 00:00:00
et2010-09-30 00:00:00
Réponses:
Votre deuxième date est antérieure à votre première date (c'est-à-dire que vous interrogez entre le 29 septembre 2010 et le 30 janvier 2010). Essayez d'inverser l'ordre des dates:
la source
where
clause devrait fonctionner de la même manière sur les instructionsselect
orupdate
.La date de votre requête doit être
essayer
la source
Est
date_field
de typedatetime
? Vous devez également mettre la date du eariler en premier.Ça devrait être:
la source
DATE () est une fonction MySQL qui extrait uniquement la partie date d'une expression date ou date / heure
la source
Comme extension à la réponse de @sabin et un indice si l'on veut comparer la partie date uniquement (sans l'heure):
Si le champ à comparer est du type datetime et que seules les dates sont spécifiées pour la comparaison, ces dates sont converties en interne en valeurs datetime . Cela signifie que la requête suivante
sera converti en
intérieurement.
Cela entraîne à son tour un résultat qui n'inclut pas les objets du 29/09/2010 avec une valeur de temps supérieure à 00:00:00!
Ainsi, si tous les objets avec la date 2010-09-29 doivent également être inclus, le champ à comparer doit être converti en date:
la source
Vous pouvez le faire manuellement, en comparant avec supérieur ou égal et inférieur ou égal.
Dans notre exemple, nous devons récupérer des données d'un jour en particulier. Nous comparerons du début de la journée à la dernière seconde d'un autre jour.
la source
Peut-être un problème avec la configuration de la date côté serveur ou côté client. J'ai trouvé que c'était un problème commun sur plusieurs bases de données lorsque l'hôte est configuré en espagnol, français ou autre ... qui pourrait affecter le format jj / mm / aaaa ou mm / jj / aaaa.
la source
Just Cast date_field as date
la source
Lorsque vous utilisez des valeurs de date et d' heure, vous devez convertir les champs en tant que
DateTime
et nonDate
. Essayez:la source
Essayez de changer les dates:
la source