Я нашел Postgre
, имеющий очень удобную арифметику TIMESTAMP
10 и INTERVAL
. Но магия также содержит некоторые обманки, которые я обнаружил при выполнении запросов.Как проверить, что INTERVAL является относительным или абсолютным в PostgreSQL
Возникает вопрос:
Есть ли способ определить, если
INTERVAL
является относительной или абсолютной вPostgre
?
Пусть у меня есть столбец с различными INTERVAL
с в нем, некоторые из них закодированы как относительной ('1 mon'
) других кодируются как абсолютной ('30 days'
).
Поскольку относительная INTERVAL
должны быть конвертированы в абсолютном INTERVAL
, мы не можем сравнивать их напрямую:
SELECT '1 mon'::INTERVAL = '30 days'::INTERVAL;
Возвращает TRUE
, поэтому мы не можем различить.
Относительные INTERVAL
s возникают для грануляций, которые превышают неделю, поскольку неделя является самой большой грануляцией, которая четко определена. Но такой тест не является удовлетворительным:
SELECT some_interval > '1 week';
Поскольку falsy обнаружить '21 days'::INTERVAL
, как относительная вместо абсолютного.
Я знаю, что одно различие между относительным и абсолютным INTERVAL
состоит в том, что арифметика возвращает разные результаты при использовании их с TIMESTAMP
.
SELECT '2000-02-01'::TIMESTAMP + '1 mon'::INTERVAL;
SELECT '2000-02-01'::TIMESTAMP + '30 days'::INTERVAL;
Первый возвращает '2000-03-01'::TIMESTAMP
и последний возвращает '2000-03-02'::TIMESTAMP
, которые явно отличаются.
Но это выглядит несколько странно, чтобы проверить относительность генерируя некоторые комбинации арифметики (мы можем пропустить некоторые случаи использования), и он будет не в состоянии различать '1 week'::INTERVAL
и '7 days'::INTERVAL
(но мы можем предположить, что это хорошо, потому что они действительно равны).
Итак, я ищу встроенный в или самодельныйFUNCTION
, который способен обнаружить, если INTERVAL
является абсолютным или относительной в Postgre
. Есть идеи?
В чем заключается цель различия? –
@ClodoaldoNeto, Что значит? – jlandercy
Я имею в виду, почему вам нужно провести различие между относительным и абсолютным? –