Пересечение интервалов времени

1. Есть запись (дата+время) это начало процесса и есть (Дата+время) окончание процесса, те получили от А до Б.
2. Добавляем 2 запись тоже (дата+время)-А и (дата+время)-Б
Вопрос как можно проверить пересечение интервалов времени?

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

http://postgresql.ru.net/manu

http://postgresql.ru.net/manual/functions-datetime.html
похоже вам нужно OVERLAPS

решение

Решается просто. Схема:
Пересечение, это когда сработал хотя бы один (условие OR) из вариантов:
Вариант прямой
1)
A -----|----------|-------
B---|--------|------------
b.end between a.start and a.end
2)
A -----|----------|-------
B-----------|--------|----
b.start between a.start and a.end
3)
A ------------|--|-------
B-----------|--------|----
(лениво - сами догадаетесь)
4) Это частный случай описывается 1 и 2 условиями. Можно его не описывать. Привожу исключительно для понимания ситуации.
A ------|--------------|---
B-----------|------|----
(лениво - сами догадаетесь)
объедините сами

или не сработало ни одно из этих (условие не ( ... или ... или...))
Вариант "от противного" - ищем вариант НЕ пересечение и логически инвертируем
1)
A---|---|----
B----------|---|
(a.end < b.start)
2)
A-------------|-----|---
B---|---|---------------
(a.start > b.end)

объединим: (нужно не не пересечение ) = (нужно пересечение)
not (a.end < b.start or a.start > b.end)

Есть еще вариант, о котором писал admin (этот вариант проще, но недостаток гибкости - будите использовать "пересечение" так, как это понимают разработчики) или написать самому (это немного сложнее, но зато есть полная свобода действий и выбор нужного вам алгоритма)
выбирайте варианты и реализацию.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023