Определение пересечения интервалов в кольце

FastCode 1521 12 22 67

Вычисление пересекающихся интервалов в линейных и замкнутых пространствах имен

Пусть есть две смены: одна с 20:00 до 8: 00, а вторая с 6:00 до 18:00. Пересекаются ли они? Ответ на данный конкретный вопрос вроде бы вполне очевиден, а вот сформулировать общее правило оказывается совсем не так просто.

В результате запрос, выбирающий смены, пересекающиеся с интервалом времени, заданными переменными @start и @end, выглядит вот так:

select * from tab
where (@start - start) * (start - @end) * (@start - @end) <= 0 
      or (@start - start) * (@start - end) * (start - end) >= 0;

Это запрос на языке SQL. Для языка запросов 1С время начала и окончания смен потребуется заранее перевести в числовой тип (например, секунды) или использовать встроенную функцию языка запросов "РАЗНОСТЬДАТ".

Данный прием основан на эмуляции логического выражения XOR арифметическим произведением с оценкой знака получившегося результата.

Автор: ildarovich

0

См. также

Определить элементарные интервалы, образующиеся при пересечении всех исходных интервалов

Пересечение cписков

Определение суммарного покрытия перекрывающихся интервалов

Нахождение интервалов в запросе

ОбработчикиОбновленияВИнтервале (БСП)

Объединение непересекающихся интервалов в запросе

Общие элементы массивов

Разбиение произвольного периода на интервалы в запросе

ПриОпределенииНастроек (БСП)

Модератору