Официальный сайт студ.городка НГТУ
Программирование и БД » Postgresql, интервалы в днях 

#1  11.12.12 16:27

sav
Профиль

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

sav
Профиль

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

Программирование и БД » Postgresql, интервалы в днях 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.982 сек.
Выполнено 11 запросов.