Есть ли разница между добавлением целого числа к дате по сравнению с интервалом дня? - PullRequest
0 голосов
/ 27 июня 2018

Мне интересно, есть ли разница между

select  '1980-01-01'::date + 2345;

против

select '1980-01-01'::date + '2345 days'::interval;

Помимо того факта, что вторая версия возвращает временную метку, очевидно, что вопрос связан с общим случаем, а не с этим конкретным примером

1 Ответ

0 голосов
/ 27 июня 2018

Нет никакой разницы, кроме возвращаемого типа, который вы упомянули. Когда вы добавляете 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...