#1 11.12.12 16:27
Postgresql, интервалы в днях
Всем привет,
Пытаюсь получить разницу в днях:
Код::
SELECT
CAST( TO_DATE('2999-01-01','yyyy-mm-dd') - TO_DATE('2909-01-01','yyyy-mm-dd') AS DECIMAL )Если к одной из дат добавить месяц:
Код::
SELECT
CAST( TO_CHAR( TO_DATE('2909-02-10','yyyy-mm-dd') - (TO_DATE('2909-01-01','yyyy-mm-dd') + INTERVAL '1 MONTH' * (1) ), 'DD') AS DECIMAL )То падает с ошибкой:
ERROR: cannot cast type interval to numeric
Хорошо, избавляемся от нее:
Код::
SELECT
CAST( TO_CHAR( TO_DATE('2909-02-10','yyyy-mm-dd') - (TO_DATE('2909-01-01','yyyy-mm-dd') + INTERVAL '1 MONTH' * (1) ), 'DD') AS DECIMAL )Но теперь, эта же логика,применимая к первому запросу не работает:
Код::
SELECT
CAST( TO_CHAR(TO_DATE('2999-01-01','yyyy-mm-dd') - TO_DATE('2909-01-01','yyyy-mm-dd'), 'DD') AS DECIMAL )Падает:
ERROR: multiple decimal points.
Вопрос, как сделать так, чтобы отрабатывало во всех случаях?
Исправлено sav (11.12.12 16:27)
Offline
#2 12.12.12 16:02
Re: Postgresql, интервалы в днях
Не актуально. Если кому то интересно, Posgtgre интересно обрабатывает даты.
Date-Date=Integer
Date - (Date + 1month) = Date - Timestamp = Interval
Timestamp - Timestamp = Interval
Как результат, кастуем все к Timestamp (если это возможно по бизнесс логике), и количество дней берем с помощью extract(Days from.
Альтернатива - воспользоваться extract(epoch from age(date1, date2), но этот вариант я не тестировал у себя с различными типами дат.
Как то так.
Исправлено sav (12.12.12 16:02)
Offline

