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');

Formatos de fecha

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