Thread: Сравнение дат без года
Приветствую
Не могу решить следующую задачу. Надо сравнить интервалы дат без года, пересекаются ли они. В документации нашел оператор 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
У кого какие мысли как победить проблему если интервал проходит через Новый Год?
Спасибо
Не могу решить следующую задачу. Надо сравнить интервалы дат без года, пересекаются ли они. В документации нашел оператор 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
У кого какие мысли как победить проблему если интервал проходит через Новый Год?
Спасибо
Здравствуйте Станислав,
--
// Dmitriy.
22 октября 2010 г. 19:47 пользователь Stanislav Orlenko <orlenko.stas@gmail.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, то эта дата и была выбрана как левая граница
первого интервала.
Полагаю, что так или иначе придётся указывать год.
присвоил год каждому из интервалов автоматически - 0001.
Т.к. 0001-01-02 < 0001-12-15, то эта дата и была выбрана как левая граница
первого интервала.
Полагаю, что так или иначе придётся указывать год.
У кого какие мысли как победить проблему если интервал проходит через Новый Год?
Спасибо
--
// Dmitriy.