Maison >base de données >tutoriel mysql >Pourquoi la comparaison de dates MySQL avec date_format donne-t-elle des résultats inattendus ?
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!