Fechas y horassolo PostgreSQL

MAKE_INTERVAL

Construye un intervalo a partir de números sueltos: años, meses, días, horas.

Sintaxis

MAKE_INTERVAL(<unidad> => <cantidad>, …)

Útil cuando una duración se guarda como número o se calcula. Los argumentos tienen nombre, así que indicas solo los que necesitas y el resto vale cero. A diferencia de pegar texto, (n || ' days')::interval, no tienes que preocuparte por el formato. Unidades: years, months, weeks, days, hours, mins, secs.

Un intervalo a partir de números
SELECT MAKE_INTERVAL(days => 10) AS ten_days,
MAKE_INTERVAL(hours => 1, mins => 30) AS ninety_minutes;
ten_daysninety_minutes
10 days01:30:00
Desplazar un número calculado de días
SELECT n,
TIMESTAMP '2026-09-13' + MAKE_INTERVAL(days => n) AS day
FROM GENERATE_SERIES(1, 3) AS n;
nday
12026-09-14 00:00:00
22026-09-15 00:00:00
32026-09-16 00:00:00
Frente a pegar texto
SELECT MAKE_INTERVAL(days => 3) AS make_interval,
(3 || ' days')::interval AS from_text;
make_intervalfrom_text
3 days3 days

Ten en cuenta

Sin nombres, los argumentos van por orden y el primero son los años: MAKE_INTERVAL(10) son 10 años, no días.

Los minutos son mins y los segundos, secs: MAKE_INTERVAL(minutes => 5) da el error function make_interval(minutes => integer) does not exist.

Solo los segundos pueden tener decimales: MAKE_INTERVAL(days => 1.5) es un error. Un día y medio es MAKE_INTERVAL(days => 1, hours => 12).

Funciones relacionadas