Comparaison de dates MySQL avec DATE_FORMAT()
Dans cet article, nous explorerons comment effectuer des comparaisons de dates dans MySQL à l'aide de DATE_FORMAT() fonction, résolvant un problème spécifique rencontré par un utilisateur lors de la comparaison de dates.
Le problème
L'utilisateur a été confronté à un défi lors de la comparaison de dates à l'aide de DATE_FORMAT(). Les dates ont été stockées au format suivant : '%d-%m-%Y', qui n'est pas un format facile à trier. À l'aide de la requête ci-dessous, l'utilisateur a tenté de comparer les dates :
<code class="sql">SELECT DATE_FORMAT(DATE(starttime), '%d-%m-%Y') FROM data WHERE DATE_FORMAT(DATE(starttime), '%d-%m-%Y') >= '02-11-2012';</code>
Cependant, le résultat incluait « 28-10-2012 », ce qui était incorrect selon les attentes de l'utilisateur.
La solution
Le problème se pose parce que nous comparons des chaînes au lieu de dates. DATE_FORMAT() convertit une date en chaîne et les chaînes sont comparées lexicographiquement. Dans ce cas, « 28-10-2012 » est supérieur au « 02-11-2012 » lexicographiquement, même si « 02-11-2012 » est une date ultérieure.
Pour comparer avec précision les dates, nous avons besoin pour les comparer sous forme de dates et non de chaînes. Nous pouvons utiliser la fonction DATE() pour extraire le composant date du champ starttime, puis comparer les dates à l'aide de l'opérateur >=, comme indiqué dans la requête suivante :
<code class="sql">SELECT DATE_FORMAT(DATE(starttime), '%d-%m-%Y') FROM data WHERE DATE(starttime) >= DATE('2012-11-02');</code>
Cette requête fonctionnera correctement comparez les dates et excluez « 28-10-2012 » du résultat.
Considération supplémentaire
Il vaut la peine de se demander si l'heure de début du champ DATETIME peut être modifiée en DATE champ. Cela éliminerait le besoin de conversions répétées, améliorant potentiellement les performances.
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!