Нет никакой разницы, кроме возвращаемого типа, который вы упомянули. Когда вы добавляете integer
к date
, Postgres обрабатывает его так, как если бы вы добавляли тип интервала с днями. Фактически, эта операция явно упоминается в документации, перечисляющей операцию date + integer
. Хотя это не объясняет, что происходит внизу, можно ясно предположить, что он добавляет наименьшую возможную степень детализации (дни в дате).
Кроме того, обратите внимание, что 24 часа не равны 1 дню, который можно наблюдать при изменениях летнего времени.
В документации упоминается эта операция:
Operator Example Result
+ date '2001-09-28' + integer '7' date '2001-10-05'
Эта же операция выполняется в обратном порядке в случае возвращаемых типов данных: date - date
возвращает int
:
db=# select pg_typeof('1980-05-01'::DATE - '1980-02-03'::DATE);
pg_typeof
-----------
integer
Ограничение для первой попытки добавления числа к дате заключается в том, что вы не можете успешно добавлять дроби дня к вашей дате (например, 12.5 days
), что очевидно (поскольку оно больше не является целым числом), потому что оно не смог бы привести вывод к дате. Это означает, что '1980-01-01' + 12.5
возвращает ошибку несуществующего оператора date + numeric
.