Maison  >  Article  >  base de données  >  Pourquoi la comparaison de dates MySQL avec date_format donne-t-elle des résultats inattendus ?

Pourquoi la comparaison de dates MySQL avec date_format donne-t-elle des résultats inattendus ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-24 11:15:29632parcourir

Why Is MySQL Date Comparison with date_format Yielding Unexpected Results?

Comparaison des dates MySQL avec date_format

Malgré la tentative de plusieurs méthodes de comparaison de dates, un utilisateur a rencontré un résultat inattendu. Ils ont cherché à comparer des dates au format « %d-%m-%Y », mais ont inclus un enregistrement erroné dans l'ensemble de résultats.

Le problème vient de la comparaison de chaînes au lieu de dates. La fonction date_format convertit les dates en chaînes, rendant la comparaison sensible à l'ordre lexicographique. Par exemple, « 28-10-2012 » est alphabétiquement plus grand que « 02-11-2012 », d'où son inclusion dans l'ensemble de résultats bien qu'il soit chronologiquement plus ancien.

Pour résoudre ce problème, la comparaison doit être effectuée sur dates au lieu de chaînes. La fonction date peut être utilisée pour extraire le composant date d'un champ DATETIME ou DATE. En comparant les dates extraites, l'ordre chronologique est assuré.

Par exemple :

<code class="mysql">select date_format(date(starttime),'%d-%m-%Y') from data
where date(starttime) >= date '2012-11-02';</code>

Dans cette requête, date(starttime) extrait la date du champ starttime, qui est ensuite comparée à la date spécifiée au format AAAA-MM-JJ. La fonction date_format est utilisée uniquement pour formater le résultat.

Si starttime est un champ DATETIME, pensez à utiliser :

<code class="mysql">select date_format(date(starttime),'%d-%m-%Y') from data
where starttime >= '2012-11-02 00:00:00';</code>

Cette requête évite une conversion de date répétée car la comparaison est effectuée directement sur le Champ DATETIME.

N'oubliez pas que la norme ISO-8601 recommande d'utiliser « AAAA-MM-JJ » comme format de date, mais le code fourni adhère au format « %d-%m-%Y » spécifié par l'utilisateur. .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn