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

FastCode 63 8

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

Пусть есть две смены: одна с 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

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз

Похожие публикации

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

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

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

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

Модератору