Re: [pgsql-ru-general] Сравнение дат без года

From: Dmitriy Igrishin <dmitigr(at)gmail(dot)com>
To: Stanislav Orlenko <orlenko(dot)stas(at)gmail(dot)com>
Cc: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: [pgsql-ru-general] Сравнение дат без года
Date: 2010-10-22 20:51:24
Message-ID: AANLkTinOX6d9_GyKnQKskzAyDOyH+YG466KPJ4SP+64B@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-ru-general

Здравствуйте Станислав,

22 октября 2010 г. 19:47 пользователь Stanislav Orlenko <
orlenko(dot)stas(at)gmail(dot)com> написал:

> Приветствую
> Не могу решить следующую задачу. Надо сравнить интервалы дат без года,
> пересекаются ли они. В документации нашел оператор OVERLAPS.
>
> К примеру вот такой запрос работает как надо:
> SELECT
> (TO_DATE('10-15', 'MM-DD'), TO_DATE('10-25', 'MM-DD')) OVERLAPS
> (TO_DATE('10-20', 'MM-DD'), TO_DATE('11-30', 'MM-DD'));
>
> true
>
> Т. е. интервалы с 15 Октября - 25 Октября и 20 Октября - 30 Ноября
> пересекаются.
>
> НО, если интервал(ы) проходят через Новый Год - проблема.
> К примеру если сравнить интервалы с 15 Декабря - 2 Января и 4 Января - 10
> Января. При следующем запросе:
>
> SELECT
> (TO_DATE('12-15', 'MM-DD'), TO_DATE('01-02', 'MM-DD')) OVERLAPS
> (TO_DATE('01-04', 'MM-DD'), TO_DATE('01-10', 'MM-DD'));
>
> true
>
> Хотя интервалы не пересекаются. Судя по всему постгрес сравнивает 01.02 -
> 12.15 и 01.04 - 01.10
>
Указанные интервалы пересекаются, потому что Вы не указали год и сервер
присвоил год каждому из интервалов автоматически - 0001.
Т.к. 0001-01-02 < 0001-12-15, то эта дата и была выбрана как левая граница
первого интервала.
Полагаю, что так или иначе придётся указывать год.

>
> У кого какие мысли как победить проблему если интервал проходит через Новый
> Год?
>
> Спасибо
>

--
// Dmitriy.

In response to

Browse pgsql-ru-general by date

  From Date Subject
Next Message Mihail Nasedkin 2010-10-29 10:02:13 вариации выполнения запроса
Previous Message Stanislav Orlenko 2010-10-22 15:47:44 Сравнение дат без года