Справочник по функциям

INTERVAL

Конструкция SQL

Задаёт промежуток времени — интервал, который можно прибавлять к датам и вычитать из них.

PostgreSQL 17.5
INTERVAL 'quantity unit[ quantity unit ...]'

Параметры

quantitynumeric
Количество единиц, может быть дробным или отрицательным
unitключевое слово
Единица времени, можно во множественном числе (days, hours); несколько пар перечисляются через пробел
Значения:microsecondmillisecondsecondminutehourdayweekmonthyeardecadecenturymillennium

Возвращаемое значение

Значение типа interval

Примеры

Интервалы разной длины

PostgreSQL 17.5
SELECT INTERVAL '1 year 2 months 3 days' AS long_interval,
	INTERVAL '90 minutes' AS minutes;
long_intervalminutes
1 year 2 mons 3 days01:30:00

Дата совершеннолетия

PostgreSQL 17.5
SELECT member_name,
	birthday,
	birthday + INTERVAL '18 years' AS adult_since
FROM FamilyMembers;
member_namebirthdayadult_since
Headley Quincey1960-05-131978-05-13
Flavia Quincey1963-02-161981-02-16
Andie Quincey1983-06-052001-06-05
Lela Quincey1985-06-072003-06-07
Annie Quincey1988-04-102006-04-10
Ernest Forrest1961-09-111979-09-11
Constance Forrest1968-09-061986-09-06
Wednesday Addams2005-01-132023-01-13

Арифметика с датами

PostgreSQL 17.5
SELECT DATE '2024-01-31' + INTERVAL '1 month' AS month_later,
	TIMESTAMP '2024-03-08 10:00' - TIMESTAMP '2024-03-01 08:30' AS difference,
	INTERVAL '1 day' * 3 AS three_days;
month_laterdifferencethree_days
2024-02-297 days 01:30:003 days

Платежи за последние три месяца

PostgreSQL 17.5
SELECT payment_id,
	date
FROM Payments
WHERE date >= TIMESTAMP '2006-03-12' - INTERVAL '3 months'
ORDER BY date;
payment_iddate
122005-12-22
212006-01-12
282006-01-15
222006-03-12

Подробности

Интервал можно прибавить к дате или вычесть из неё и умножить на число, а разность двух значений timestamp — тоже интервал. Дата плюс интервал даёт timestamp, а разность двух дат типа date — целое число дней.

Месяцы учитывают длину месяца: DATE '2024-01-31' + INTERVAL '1 month' даёт 2024-02-29. Часы не переводятся в дни сами: INTERVAL '36 hours' так и остаётся 36:00:00, а JUSTIFY_HOURS превращает его в 1 day 12:00:00.

Смотрите также

Где изучить