Дати й часлише PostgreSQL

MAKE_INTERVAL

Складає інтервал з окремих чисел: років, місяців, днів, годин.

Синтаксис

MAKE_INTERVAL(<одиниця> => <кількість>, …)

Зручно, коли тривалість зберігається числом або обчислюється. Аргументи іменовані, тож вказують лише потрібні, а решта дорівнює нулю. На відміну від склеювання тексту (n || ' days')::interval, не треба думати про формат. Одиниці: years, months, weeks, days, hours, mins, secs.

Інтервал з чисел
SELECT MAKE_INTERVAL(days => 10) AS ten_days,
MAKE_INTERVAL(hours => 1, mins => 30) AS ninety_minutes;
ten_daysninety_minutes
10 days01:30:00
Зсув на обчислену кількість днів
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
Проти склеювання тексту
SELECT MAKE_INTERVAL(days => 3) AS make_interval,
(3 || ' days')::interval AS from_text;
make_intervalfrom_text
3 days3 days

Зверни увагу

Без імен аргументи йдуть по порядку, і перший — роки: MAKE_INTERVAL(10) — це 10 років, а не днів.

Хвилини — mins, секунди — secs: MAKE_INTERVAL(minutes => 5) дасть помилку function make_interval(minutes => integer) does not exist.

Дробовими можуть бути лише секунди: MAKE_INTERVAL(days => 1.5) — помилка. Півтора дня — це MAKE_INTERVAL(days => 1, hours => 12).

Схожі функції