"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo lograr comparaciones de fechas precisas con DATE_FORMAT() en MySQL?

¿Cómo lograr comparaciones de fechas precisas con DATE_FORMAT() en MySQL?

Publicado el 2024-11-03
Navegar:228

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

Comparación de fechas de MySQL con DATE_FORMAT()

En este artículo, exploraremos cómo realizar comparaciones de fechas en MySQL usando DATE_FORMAT() función, que aborda un problema específico que enfrenta un usuario al comparar fechas.

El problema

El usuario enfrentó un desafío al comparar fechas usando DATE_FORMAT(). Las fechas se almacenaron en el siguiente formato: '%d-%m-%Y', que no es un formato fácil de ordenar. Utilizando la siguiente consulta, el usuario intentó comparar las fechas:

SELECT DATE_FORMAT(DATE(starttime), '%d-%m-%Y')
FROM data
WHERE DATE_FORMAT(DATE(starttime), '%d-%m-%Y') >= '02-11-2012';

Sin embargo, el resultado incluyó '28-10-2012', que fue incorrecto según las expectativas del usuario.

La solución

El problema surge porque estamos comparando cadenas en lugar de fechas. DATE_FORMAT() convierte una fecha en una cadena y las cadenas se comparan lexicográficamente. En este caso, '28-10-2012' es mayor que '02-11-2012' lexicográficamente, aunque '02-11-2012' es una fecha posterior.

Para comparar fechas con precisión, necesitamos para compararlos como fechas, no como cadenas. Podemos usar la función DATE() para extraer el componente de fecha del campo de hora de inicio y luego comparar las fechas usando el operador >=, como se muestra en la siguiente consulta:

SELECT DATE_FORMAT(DATE(starttime), '%d-%m-%Y')
FROM data
WHERE DATE(starttime) >= DATE('2012-11-02');

Esta consulta comparará correctamente las fechas y excluirá '28-10-2012' del resultado.

Consideración adicional

Vale la pena considerar si la hora de inicio del campo DATETIME se puede cambiar a un campo DATE. Esto eliminaría la necesidad de realizar conversiones repetidas, lo que podría mejorar el rendimiento.

Declaración de liberación Este artículo se reimprime en: 1729738847 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3