Я столкнулся с неожиданным поведением своего кода SQL в вычислениях дат на поворотах PostgreSQL 9.6.Анализируя, я обнаружил, что Postgres не всегда возвращает одно и то же значение для возврата n
дней, а затем вычисляет длительность с помощью age()
.
. Рассмотрим этот код: мы устанавливаем один день как "base ", перейдите на 45 дней назад и затем рассчитайте продолжительность.
WITH basedate AS (SELECT '2018-05-01'::date AS b),
myperiod AS (SELECT (basedate.b - interval '45 days') AS "startDate",
basedate.b AS "endDate" FROM basedate)
SELECT age("endDate","startDate") FROM myperiod;
Я ожидаю, что этот запрос всегда будет приводить к 45 days
.Однако, если я поменяю basedate
на 2018-06-01
, я получу 44 days
.
Почему это так?
Я думаю, это как-то связано с майским31 деньОднако я не могу точно объяснить, почему, поскольку 2018-05-01
и 2018-06-01
приведут к одинаковой продолжительности, если я изменю 45 days
на 15 days
.