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.