При вычитании одной даты из другой результатом является временной интервал. Временной интервал существует в 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 |