Maison  >  Article  >  base de données  >  Comment obtenir des comparaisons de dates précises avec DATE_FORMAT() dans MySQL ?

Comment obtenir des comparaisons de dates précises avec DATE_FORMAT() dans MySQL ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-24 11:21:29424parcourir

How to Achieve Accurate Date Comparisons with DATE_FORMAT() in MySQL?

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!

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