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;Дата совершеннолетия
PostgreSQL 17.5
SELECT member_name,
birthday,
birthday + INTERVAL '18 years' AS adult_since
FROM FamilyMembers;Арифметика с датами
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;Платежи за последние три месяца
PostgreSQL 17.5
SELECT payment_id,
date
FROM Payments
WHERE date >= TIMESTAMP '2006-03-12' - INTERVAL '3 months'
ORDER BY date;Подробности
Интервал можно прибавить к дате или вычесть из неё и умножить на число, а разность двух значений 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.