В настоящее время я имею дело со многими, возможно, неопределенными диапазонами дат, т.е.
StartDate EndDate
--------- ---------
01JAN1921 31DEC2009
10OCT1955 null
...
где другой конец интервала может быть неизвестен или не определен. Я работал над небольшими функциями для обнаружения перекрытия, определения того, является ли интервал подинтервалом другого, вычисления разрыва между двумя интервалами и т. д.
Например, для обнаружения перекрытий проблема заключается в следующем.
S E S and E are the start and end of the interval
| | we're comparing to. Here both are known, but
s1------+---e1 | either could be null. The small s:s and e:s
| | s2....e2 define the intervals we're comparing to and
|s3--e3 | again we'd like to allow for open intervals.
| s4--+----e4
s5..e5| |
s6--+-------+--s7
| |
На основе вопросов, связанных с обнаружением перекрытия с четко определенными интервалами, вам необходимо проверить
Coalesce(S,Coalesce(e-1,0))<Coalesce(e,Coalesce(S+1,1))
AND Coalesce(E,Coalesce(s+1,0))>Coalesce(s,Coalesce(E-1,1))
Я полагаю, что это настолько распространенная вещь (относительно не только дат или временных интервалов), что многие люди сталкивались с этим. Я ищу существующие реализации, предпочтительно просто функции, основанные на базовых операциях сравнения.