Manejo de fechas
Algunas funciones de manejo de fechas
Obtener fechas en español:
SET lc_time_names = 'es_ES'; SELECT DATE_FORMAT(now(),'%d - %m - %Y') AS fecha; SELECT MONTHNAME(NOW()) AS mes;
Algunos ejemplos SQL que utilizan fechas
1. Obtener la fecha actual y la hora actual
MySQL tiene varias funciones para esto dependiendo de si quieres solo fecha, solo hora o ambas.
-- Fecha y hora actuales (formato YYYY-MM-DD HH:MM:SS) SELECT NOW(); -- Solo la fecha actual (YYYY-MM-DD) SELECT CURDATE(); -- Solo la hora actual (HH:MM:SS) SELECT CURTIME();
2. Restar fechas y horas
Para saber la diferencia entre dos momentos.
-- Diferencia en DÍAS entre dos fechas (Fecha1 - Fecha2)
-- Ejemplo: Devuelve 31
SELECT DATEDIFF('2024-02-01', '2024-01-01');
-- Diferencia de TIEMPO entre dos horas (Hora1 - Hora2)
-- Ejemplo: Devuelve 02:00:00
SELECT TIMEDIFF('14:30:00', '12:30:00');
-- Diferencia precisa en la unidad que quieras (segundos, meses, años...)
-- Ejemplo: Edad de una persona nacida en 1990
SELECT TIMESTAMPDIFF(YEAR, '1990-05-15', NOW()) AS edad;
3. Sumar/restar intervalos
Muy útil para calcular vencimientos o fechas límite.
-- Sumar 10 días a la fecha actual
SELECT DATE_ADD(NOW(), INTERVAL 10 DAY);
-- Restar 2 meses a una fecha específica
SELECT DATE_SUB('2024-05-15', INTERVAL 2 MONTH);
-- Sintaxis alternativa más legible con operadores +/-
SELECT '2024-05-15' + INTERVAL 1 YEAR;
SELECT NOW() - INTERVAL 3 HOUR;
4. Extraer ciertas partes de la fecha/hora
Para obtener solo el año, el mes, etc.
-- Usando funciones específicas
SELECT YEAR('2024-12-25') AS anio,
MONTH('2024-12-25') AS mes,
DAY('2024-12-25') AS dia;
-- Usando la función genérica EXTRACT (estándar SQL)
SELECT EXTRACT(HOUR FROM '2024-12-25 18:30:00') AS hora;
SELECT EXTRACT(YEAR_MONTH FROM '2024-12-25') AS anio_mes; -- Devuelve 202412
5. Crear una fecha/hora a partir de sus partes
Si tienes los datos sueltos (ej. columnas separadas para día, mes y año) y quieres formar una fecha.
-- Crear fecha desde Año y Día del año (1-366) SELECT MAKEDATE(2024, 32); -- Devuelve '2024-02-01' -- Crear hora desde H, M, S SELECT MAKETIME(14, 30, 00); -- Devuelve '14:30:00' -- Truco común para crear fecha completa desde año, mes, día sueltos: SELECT STR_TO_DATE(CONCAT(2024, ',', 12, ',', 25), '%Y,%m,%d');
6. Convertir cadenas en objetos de fecha/hora
Cuando recibes fechas en texto (ej. «31/12/2024») y necesitas guardarlas en un campo DATE.
-- Convierte texto 'DD/MM/YYYY' a fecha MySQL
SELECT STR_TO_DATE('31/12/2024', '%d/%m/%Y');
-- Convierte texto con hora 'DD-MM-YYYY HH:MM'
SELECT STR_TO_DATE('31-12-2024 23:59', '%d-%m-%Y %H:%i');
7. Cambiar el formato de visualización (Output)
Para mostrar la fecha en un formato legible para el usuario (ej. «Domingo, 15 de Mayo»).
-- Formato típico español: '15/05/2024' SELECT DATE_FORMAT(NOW(), '%d/%m/%Y'); -- Formato detallado: 'Www DD Mmm YYYY' (Ej: 'Wed 15 May 2024') SELECT DATE_FORMAT(NOW(), '%a %d %b %Y'); -- Solo la hora en formato 12h con AM/PM SELECT DATE_FORMAT(NOW(), '%h:%i %p');
Más información:
Funciones de fecha y hora de MySQL
Base de datos:
create database viajes;
use viajes;
CREATE TABLE trips (
id int primary key,
destination varchar(32),
departure_date date,
return_date date,
departure_timestamp timestamp,
arrival_timestamp timestamp
);
INSERT INTO trips
VALUES (1, 'San Francisco', '2022-03-21', '2022-03-26', '2022-03-21 08:00:00', '2022-03-21 11:14:00');
INSERT INTO trips
VALUES (2, 'London', '2022-06-03', '2022-06-10', '2022-06-03 19:00:00', '2022-06-04 07:10:00');
INSERT INTO trips
VALUES (3, 'Sydney', '2022-07-28', '2022-08-10', '2022-07-28 15:00:00', '2022-07-30 06:55:00');
SET lc_time_names = 'es_ES'; SELECT DATE_FORMAT(NOW(), "%d-%m-%Y %h:%m:%S %p"); SELECT DATE_FORMAT(NOW(), "%W, %d-%M-%Y %h:%m:%S %p");
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.