Consultas temporales avanzadas en MySQL

Para realizar consultas basadas en tiempo en MySQL, es fundamental que el campo temporal en tu tabla utilice el tipo de dato DATETIME o TIMESTAMP. Si el campo está definido como DATE únicamente, las consultas con precisión horaria no serán posibles.

Para obtener el momento actual en MySQL:SELECT CURRENT_TIMESTAMP();Resultado:2024-01-15 14:32:18 Para obtener el timestamp UNIX del momento actual:SELECT CURRENNT_TIMESTAMP(), UNIX_TIMESTAMP(CURRENT_TIMESTAMP());Resultado:+---------------------+-----------------------+ | CURRENT_TIMESTAMP() | UNIX_TIMESTAMP(CURRENT_TIMESTAMP()) | +---------------------+-----------------------+ | 2024-01-15 14:32:18 | 1705318338 | +---------------------+-----------------------+

Recuperar registros de las últimas dos horas:

SELECT * FROM sistema_eventos 
WHERE UNIX_TIMESTAMP(CURRENT_TIMESTAMP()) - UNIX_TIMESTAMP(fecha_registro) <= 7200 
ORDER BY fecha_registro DESC;

sistema_eventos : nombre de la tabla

fecha_registro : campo de tiempo en la base de datos

Para consultar el último minuto: cambiar 7200 por 60.

Obtener los 5 eventos más recientes del último período:

SELECT * FROM sistema_eventos 
WHERE UNIX_TIMESTAMP(CURRENT_TIMESTAMP()) - UNIX_TIMESTAMP(fecha_registro) <= 7200 
ORDER BY fecha_registro DESC 
LIMIT 5;

Consultar datos del último día:

SELECT * FROM sistema_eventos 
WHERE TO_DAYS(CURRENT_DATE()) - TO_DAYS(fecha_registro) <= 1 
ORDER BY fecha_registro DESC;

sistema_eventos : nombre de la tabla

fecha_registro : campo de tiempo en la base de datos

Consultar registros de los últimos 14 días:

SELECT * FROM transacciones 
WHERE DATE_SUB(CURRENT_DATE(), INTERVAL 14 DAY) <= fecha_transaccion;

Consultar datos de los últimos 90 días:

SELECT * FROM transacciones 
WHERE DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY) <= fecha_transaccion;

Consultar entre dos fechas específicas:

SELECT * FROM pedidos 
WHERE fecha_creacion BETWEEN '2024-01-01' AND '2024-01-31';

Consultar datos del último semestre:

SELECT * FROM reportes 
WHERE fecha_reporte BETWEEN DATE_SUB(NOW(), INTERVAL 6 MONTH) AND NOW();

Consultar información del último bienio:

SELECT * FROM historial 
WHERE fecha_evento BETWEEN DATE_SUB(NOW(), INTERVAL 2 YEAR) AND NOW();

Consultar registros del mes actual:

SELECT * FROM actividades 
WHERE DATE_FORMAT(fecha_actividad, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m');

Consultar datos del mes anterior:

SELECT * FROM actividades 
WHERE DATE_FORMAT(fecha_actividad, '%Y-%m') = DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m');

Consultar registros de la semana en curso:

SELECT * FROM sesiones 
WHERE YEARWEEK(DATE_FORMAT(fecha_sesion, '%Y-%m-%d')) = YEARWEEK(NOW());

Consultar datos de la semana previa:

SELECT * FROM sesiones 
WHERE YEARWEEK(DATE_FORMAT(fecha_sesion, '%Y-%m-%d')) = YEARWEEK(NOW()) - 1;

O alternativamente:

SELECT * FROM sesiones 
WHERE DATE_SUB(CURDATE(), INTERVAL 1 WEEK) <= fecha_sesion;

Funciones temporales adicionales:

(1) SELECT DAYOFWEEK('2024-01-15'); -> 2

DAYOFWEEK(fecha) retorna el índice del día (1 = Domingo, 2 = Lunes, ... 7 = Sábado).

(2) SELECT WEEKDAY('2024-01-15 09:30:00'); -> 0

WEEKDAY(fecha) retorna el índice (0 = Lunes, 1 = Martes, ... 6 = Domingo).

(3) SELECT DAYOFMONTH('2024-01-15'); -> 15

DAYOFMONTH(fecha) retorna el día del mes (1-31).

(4) SELECT DAYOFYEAR('2024-01-15'); -> 15

DAYOFYEAR(fecha) retorna el día del año (1-366).

(5) SELECT MONTH('2024-01-15'); -> 1

MONTH(fecha) retorna el mes (1-12).

(6) SELECT DAYNAME('2024-01-15'); -> 'Monday'

DAYNAME(fecha) retorna el nombre del día.

(7) SELECT MONTHNAME('2024-01-15'); -> 'January'

MONTHNAME(fecha) retorna el nombre del mes.

(8) SELECT QUARTER('2024-03-15'); -> 1

QUARTER(fecha) retorna el trimestre del año (1-4).

(9) WEEK(fecha, modo)

Retorna la semana del año. El modo opcional define el inicio de semana:

  • 0: Domingo como primer día, rango 0-53
  • 1: Lunes como primer día, rango 0-53
  • 2: Domingo como primer día, rango 1-53
  • 3: Lunes como primer día, rango 1-53 (ISO 8601)

Ejemplos:

SELECT WEEK('2024-01-15'); -- 3
SELECT WEEK('2024-01-15', 1); -- 3

YEAR(fecha) Retorna el año (1000-9999):

SELECT YEAR('2024-01-15'); -- 2024

HOUR(hora) Retorna la hora (0-23):

SELECT HOUR('14:30:45'); -- 14

MINUTE(hora) Retorna los minutos (0-59):

SELECT MINUTE('14:30:45'); -- 30

SECOND(hora) Retorna los segundos (0-59):

SELECT SECOND('14:30:45'); -- 45

DATE_ADD(fecha, INTERVAL expr tipo) DATE_SUB(fecha, INTERVAL expr tipo)

Operaciones aritméticas con fechas:

SELECT DATE_ADD('2024-01-15', INTERVAL 1 MONTH); -- 2024-02-15
SELECT DATE_SUB('2024-01-15', INTERVAL 7 DAY); -- 2024-01-08

El parámetro tipo puede ser: SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR.

Etiquetas: MySQL consultas-sql funciones-temporales timestamp datetime

Publicado el 9-29 15:08