При вычитании одной даты из другой результатом является временной интервал. Временной интервал существует в Postgres как самостоятельный тип данных.
Даты складывать нельзя, но к дате прибавить временной интервал можно. Например, к 31.01.2023 12:00 добавить 3 часа - вполне законная операция с понятным результатом 31.01.2023 15:00.
Выполним эту операцию на практике:
SELECT timestamp '2023-01-31 12:00' + interval '3 hours' AS result
| # | result |
|---|---|
| 1 | 2023-01-31 15:00:00 |
Вычитать временной интервал тоже можно:
SELECT timestamp '2023-01-31 12:00' - interval '3 hours' AS result
| # | result |
|---|---|
| 1 | 2023-01-31 09:00:00 |
Ввод интервала
Временной интервал можно ввести в форме:
[@] количество единица [количество единица...] [направление]
где единица может принимать значения:
microsecond- микросекунды;millisecond- миллисекунды;second- секунды;minute- минуты;hour- часы;day- дни;week- недели;month- месяцы;year- годы;decade- десятилетия;century- века;millennium- тысячелетия.
SELECT interval '1 day 12 hours 59 min 10 sec'
| # | interval |
|---|---|
| 1 | 1 day 12:59:10 |
Направление может принимать значение ago (назад) или быть пустым.
SELECT interval '1 day 12 hours 59 min 10 sec ago'
| # | interval |
|---|---|
| 1 | -1 days -12:59:10 |
Знак @ является необязательным.
Количество может быть отрицательным числом.
SELECT interval '12 hours -10 minutes'
| # | interval |
|---|---|
| 1 | 11:50:00 |