Comparación de dos fechas en MySQL
- Crear una tabla e insertar valores
-
Comparación de dos fechas con la cláusula
WHERE
-
Comparar dos fechas con el operador
BETWEEN
-
Comparar dos fechas con la función
DATE_ADD
Este artículo explica la comparación de dos fechas en MySQL. Hay tres enfoques diferentes para realizar esta tarea.
- Uso de la cláusula
WHERE
- Utilizando el operador
BETWEEN
- Uso de la función
DATE_ADD
Crear una tabla e insertar valores
En primer lugar, crearé una tabla para el empleado como
Create table employee (empid int primary key, fname varchar(10), lname varchar(20), logindate timestamp not null default CURRENT_TIMESTAMP);
Ahora, insertaré algunos valores en la tabla para la demostración.
INSERT INTO employee('empid', 'fname', 'lname')VALUES (1,'aaa','bbb');
INSERT INTO employee VALUES
(201,'Peter','Parker','2001-01-01 16:15:00'),
(202,'Thor','Odinson','2021-08-02 12:15:00'),
(204,'Loki','Laufeyson','2009-08-03 10:43:24');
Comparación de dos fechas con la cláusula WHERE
La consulta a continuación es un enfoque muy sencillo que utiliza la consulta SELECT
que extrae todos los registros entre el rango de fechas dado.
SELECT * FROM employee WHERE logindate >= '2000-07-05' AND logindate < '2011-11-10';
Comparar dos fechas con el operador BETWEEN
En primer lugar, tenemos que convertir la fecha en una cadena en MySQL. Para realizar esta tarea, usaremos la función FECHA para extraer la fecha de una Fecha y hora.
La sintaxis de la función FECHA se encuentra a continuación.
DATE(column name)
Si desea aprovechar un índice en la columna fecha de inicio de sesión, puede probar esto en su lugar. El operador Between también se puede utilizar para seleccionar todos los registros que tienen la columna de fecha entre dos expresiones de fecha especificadas.
SELECT * FROM employee WHERE DATE(logindate) BETWEEN '2000-07-05' AND '2011-11-10';
MySQL solo permite un formato de fecha aaaa-mm-dd
, por lo que siempre que necesite formatear cualquier expresión de fecha de cadena, tendrá que usar este formato.
Ahora, es posible que tenga una consulta sobre cuál es la necesidad de la función DATE()
en comparación.
Entonces, la función MySQL DATE()
extrae la parte de la fecha de su columna DATETIME o TIMESTAMP en una cadena como se muestra a continuación:
mysql> SELECT DATE('2005-08-28 01:02:03'); -> '2005-08-28'
La función DATE()
se utiliza para que MySQL considere solo la parte de la fecha de los valores de la columna para la comparación. Cuando no utilice la función DATE()
, MySQL comparará la parte de tiempo de su columna con su expresión de cadena. Con esta opción, cualquier comparación incluirá la expresión de cadena especificada como parte del conjunto de resultados.
Al comparar una columna DATETIME o TIME-STAMP con una cadena que representa una fecha como en la consulta anterior, MySQL transformará los valores de columna y expresión en tipos de enteros largos para la comparación.
Esta es la razón por la que, aunque está comparando una columna de fecha con una cadena, no necesita convertir manualmente los valores de la columna de fecha en una cadena.
Comparar dos fechas con la función DATE_ADD
Otro enfoque es usar la función DATE_ADD()
. Aunque, este enfoque no necesita necesariamente la función DATE_ADD()
. Pero si desea considerar unos minutos después de la fecha deseada para ser parte de la solución, puede usar esto. Por ejemplo, si quiero todos los registros entre el rango de fechas dado, pero puedo considerar los registros que se insertaron 15 minutos después del límite especificado. Esta función es muy útil.
La función DATE_ADD()
se usa para agregar una hora o intervalo de fecha específico a una fecha determinada y luego devolver la fecha. La función DATE_ADD toma dos parámetros, el primer parámetro es la fecha y el segundo es el intervalo que se agregará
select * from employee
where logindate between '2000-07-05' and DATE_ADD('2011-07-10',INTERVAL 15 MINUTE);