Buscando eventos en los últimos 30 días
Otra tarea común es buscar filas que pertenezcan a un rango de fechas específico. En principio, esto no es difícil si las fechas de inicio y finalización del rango son fijas: SQL puede comparar fechas tan bien como números.
Los operadores de comparación se pueden aplicar a las fechas: < , > , <= , etc. Además, hay un operador especial ENTRE que también puede trabajar con fechas. Por ejemplo, escribamos una consulta que seleccione todas las tareas de la tabla de tareas que deben realizarse en el verano de 2022. La solicitud se verá así:
SELECT * FROM task
WHERE task.deadline BETWEEN '2022-06-01' AND '2022-08-31'
El resultado de esta consulta será:
identificación | empleado_id | nombre | fecha límite |
---|---|---|---|
1 | 1 | Arreglar un error en la interfaz | 2022-06-01 |
2 | 2 | Arreglar un error en el backend | 2022-06-15 |
3 | 5 | comprar cafe | 2022-07-01 |
4 | 5 | comprar cafe | 2022-08-01 |
Pero qué escribir en la solicitud si queremos obtener tareas, por ejemplo, de los últimos 30 días. Donde los últimos 30 días están directamente relacionados con el tiempo de ejecución de la consulta. Es decir, si la consulta se ejecuta el 25 de julio, debe seleccionar las fechas del 25 de junio al 24 de julio. ¿Cómo vincular un rango de fechas a la hora actual?
Para hacer esto, use la función de adición de fecha:
DATE_ADD (date, INTERVAL expression units)
Creo que será más fácil de explicar con algunos ejemplos:
# | Pedido | Resultado |
---|---|---|
1 | FECHA_AÑADIR('2022-06-04', INTERVALO 5 DÍA) | 2022-06-09 |
2 | FECHA_AÑADIR('2022-06-04', INTERVALO 4 SEMANA) | 2022-07-02 |
3 | FECHA_AÑADIR('2022-06-04', INTERVALO 2 MES) | 2022-08-04 |
4 | ||
5 | FECHA_SUB('2022-06-04', INTERVALO 5 DÍA) | 2022-05-30 |
6 | DATE_SUB('2022-06-04', INTERVALO 4 SEMANA) | 2022-05-07 |
7 | FECHA_SUB('2022-06-04', INTERVALO 2 MES) | 2022-04-04 |
Por cierto, a una fecha determinada también se le puede restar un cierto número de días, semanas, meses y años.
Y si volvemos a nuestra solicitud, para obtener datos de los últimos 30 días, entonces necesitamos dos fechas en este rango:
- CURDATE() - fin de rango
- DATE_SUB( CURDATE() , INTERVAL 30 DAY) - inicio del rango
La solicitud se verá así:
SELECT * FROM task WHERE task.deadline
BETWEEN DATE_SUB( CURDATE() , INTERVAL 30 DAY) AND CURDATE()
El resultado de esta consulta será así (tengo hoy 4 de junio de 2022):
identificación | empleado_id | nombre | fecha límite |
---|---|---|---|
1 | 1 | Arreglar un error en la interfaz | 2022-06-01 |
Cómo encontrar la diferencia entre dos fechas
Y otra característica útil. A veces es posible que necesite calcular la diferencia entre dos fechas en días. Para hacer esto, SQL tiene una función especial: DATEDIFF ().
Es muy fácil trabajar con ella:
DATEDIFF (date 1, date 2)
La segunda fecha simplemente se resta de la primera fecha. Si date2 viene después de date1, entonces el resultado será negativo.
Por cierto, podemos reescribir nuestra consulta anterior usando la función DATEDIFF(). Necesitamos seleccionar todas las tareas de la tabla de tareas cuya fecha límite difiere de la fecha actual en no más de 30 días. Así es como se vería esa solicitud:
SELECT * FROM task WHERE DATEDIFF(task.deadline, CURDATE() ) < 30
El resultado de esta consulta será así (tengo hoy 4 de junio de 2022):
identificación | empleado_id | nombre | fecha límite |
---|---|---|---|
1 | 1 | Arreglar un error en la interfaz | 2022-06-01 |
2 | 2 | Arreglar un error en el backend | 2022-06-15 |
3 | 5 | comprar cafe | 2022-07-01 |
Esta vez, SQL encontró hasta tres filas. Piensa por qué la última vez había una línea y esta vez hay tres.
GO TO FULL VERSION