🙏 Realmente necesitamos su apoyo. Necesitamos financiamiento para continuar nuestra misión: publicar nuevas lecciones y mejorar la plataforma. Si puede, por favor apoye el proyecto con una donación. Ayude al proyecto ahora →
Código SQL copiado al portapapeles

Lección 3.4: Funciones Esenciales de Fecha y Hora en SQL

Las funciones de fecha y hora en SQL permiten extraer, modificar y formatear valores de fecha y hora. Estas funciones son ampliamente utilizadas para analizar datos temporales, filtrar por fecha, calcular intervalos y formatear la salida. Esta lección cubre las funciones más comúnmente utilizadas con ejemplos basados en la base de datos Sakila.

Importante: CURRENT_DATE, CURRENT_TIME y CURRENT_TIMESTAMP son, en muchos SGBD, expresiones SQL especiales (o alias de funciones correspondientes), no "funciones regulares" en la forma NOMBRE(arg1, arg2, ...). Debido a esto, los detalles de sintaxis y comportamiento pueden diferir entre SGBD.

Funciones Comunes de Fecha y Hora

CURRENT_DATE — Una expresión especial que devuelve la fecha actual (sin hora).

Sintaxis:

CURRENT_DATE

Ejemplo:

SELECT CURRENT_DATE AS hoy;

Resultado: La fecha actual, p. ej.: 2025-06-03

CURRENT_TIME — Una expresión/alias especial que devuelve la hora actual (sin fecha).

Sintaxis:

CURRENT_TIME
CURRENT_TIME()
CURRENT_TIME(precision)

Ejemplo:

SELECT CURRENT_TIME AS ahora_hora;

Resultado: La hora actual. Con precisión especificada (por ejemplo, CURRENT_TIME(3)), el valor incluye segundos fraccionarios.

CURRENT_TIMESTAMP / NOW() — Devuelve la fecha y hora actuales (a menudo como una expresión/alias especial).

Sintaxis:

CURRENT_TIMESTAMP
CURRENT_TIMESTAMP()
CURRENT_TIMESTAMP(precision)
NOW()

Ejemplo:

SELECT CURRENT_TIMESTAMP AS ahora_fecha_hora;
SELECT NOW() AS ahora_fecha_hora;

Resultado: La fecha y hora actuales, p. ej.: 2025-06-03 14:25:30

Importante: en la mayoría de los SGBD, CURRENT_DATE/CURRENT_TIME/CURRENT_TIMESTAMP se fijan al inicio de la ejecución de la sentencia (y en algunos modos, al inicio de la transacción). Por lo tanto, dentro de una consulta, todas las filas suelen obtener el mismo valor.

Si necesitas un "timestamp actual" en el momento en que se evalúa una función para una fila específica, utiliza alternativas específicas del SGBD (por ejemplo, SYSDATE() en MySQL/MariaDB, clock_timestamp() en PostgreSQL).

DATE() — Extrae solo la fecha de un valor datetime.

Sintaxis:

DATE(datetime_value)

Ejemplo:

SELECT DATE(rental_date) AS solo_fecha_renta
FROM rental
LIMIT 3;

Resultado: Devuelve solo la fecha de la columna rental_date.

TIME() — Extrae solo la hora de un valor datetime.

Sintaxis:

TIME(datetime_value)

Ejemplo:

SELECT TIME(rental_date) AS solo_hora_renta
FROM rental
LIMIT 3;

Resultado: Devuelve solo la hora de la columna rental_date.

YEAR() — Extrae el año de un valor de fecha.

Sintaxis:

YEAR(date_value)

Ejemplo:

SELECT YEAR(rental_date) AS año_renta
FROM rental
LIMIT 3;

Resultado: Devuelve el año de la fecha de renta.

MONTH() — Extrae el mes de un valor de fecha.

Sintaxis:

MONTH(date_value)

Ejemplo:

SELECT MONTH(rental_date) AS mes_renta
FROM rental
LIMIT 3;

Resultado: Devuelve el mes de la fecha de renta.

DAY() — Extrae el día del mes de un valor de fecha.

Sintaxis:

DAY(date_value)

Ejemplo:

SELECT DAY(rental_date) AS dia_renta
FROM rental
LIMIT 3;

Resultado: Devuelve el día del mes de la fecha de renta.

DATE_ADD() — Suma un intervalo especificado a una fecha.

Sintaxis:

DATE_ADD(date, INTERVAL value unit)

Ejemplo:

SELECT DATE_ADD(rental_date, INTERVAL 7 DAY) AS fecha_devolucion
FROM rental
LIMIT 3;

Resultado: Devuelve la fecha aumentada en 7 días.

DATE_SUB() — Resta un intervalo especificado de una fecha.

Sintaxis:

DATE_SUB(date, INTERVAL value unit)

Ejemplo:

SELECT DATE_SUB(rental_date, INTERVAL 3 DAY) AS tres_dias_antes
FROM rental
LIMIT 3;

Resultado: Devuelve la fecha disminuida en 3 días.

DATEDIFF() — Devuelve el número de días entre dos fechas.

Sintaxis:

DATEDIFF(date1, date2)

Ejemplo:

SELECT DATEDIFF(return_date, rental_date) AS duracion_renta
FROM rental
WHERE return_date IS NOT NULL
LIMIT 3;

Resultado: El número de días entre la fecha de devolución y la fecha de renta.

DATE_FORMAT() — Formatea una fecha en un formato especificado (MySQL).

Sintaxis:

DATE_FORMAT(date, format)

Ejemplo:

SELECT DATE_FORMAT(rental_date, '%d.%m.%Y') AS fecha_formateada
FROM rental
LIMIT 3;

Resultado: Fecha en el formato dd.mm.yyyy, p. ej.: 03.06.2025

Especificadores de formato comunes:

  • %Y: Año (4 dígitos)
  • %m: Mes (2 dígitos)
  • %d: Día del mes (2 dígitos)
  • %H: Hora (formato de 24 horas)
  • %i: Minutos
  • %s: Segundos

STRFTIME() — Formatea fecha/hora (SQLite, PostgreSQL).

Sintaxis:

STRFTIME(format, date)

Ejemplo:

SELECT STRFTIME('%Y-%m-%d', rental_date) AS fecha_formateada
FROM rental
LIMIT 3;

Resultado: Fecha en el formato yyyy-mm-dd.

TIMESTAMPDIFF() — Diferencia entre dos fechas/horas en unidades especificadas (MySQL).

Sintaxis:

TIMESTAMPDIFF(unit, datetime1, datetime2)

Ejemplo:

SELECT TIMESTAMPDIFF(DAY, rental_date, return_date) AS dias_alquilados
FROM rental
WHERE return_date IS NOT NULL
LIMIT 3;

Resultado: El número de días entre las fechas de renta y devolución.

EXTRACT() — Extrae una parte de una fecha o hora (año, mes, día, etc.).

Sintaxis:

EXTRACT(part FROM date)

Ejemplo:

SELECT EXTRACT(YEAR FROM rental_date) AS año_renta
FROM rental
LIMIT 3;

Resultado: Extrae el año de la fecha de renta.


Uso Práctico

  1. Encontrar películas alquiladas en los últimos 30 días:
    SELECT *
    FROM rental
    WHERE rental_date > DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY);
    
  2. Contar alquileres por mes:
    SELECT YEAR(rental_date) AS año, MONTH(rental_date) AS mes, COUNT(*) AS alquileres
    FROM rental
    GROUP BY año, mes
    ORDER BY año DESC, mes DESC;
    
  3. Formatear la fecha de alquiler para un informe:
    SELECT DATE_FORMAT(rental_date, '%d.%m.%Y') AS alquiler_formateado
    FROM rental
    LIMIT 5;
    

Conclusiones Clave de Esta Lección

Las funciones de fecha y hora te permiten analizar y transformar datos temporales de manera flexible en SQL. Úsalas para filtrar, agrupar, calcular intervalos y formatear fechas en informes. Practica estas funciones con ejemplos de la base de datos Sakila para reforzar tus habilidades.