проверить перекрывающиеся даты (vb.net) - PullRequest
3 голосов
/ 15 ноября 2009

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

У кого-нибудь есть идеи, как это сделать?

Ответы [ 3 ]

8 голосов
/ 15 ноября 2009

Ниже эквивалентно тому, что предлагает Гарри

select   count(1)
from     YourTable
where    (@start < End and @end > Start)
4 голосов
/ 15 ноября 2009

У вас есть 3 сценария перекрытия: содержит начало, конец и диапазон оберток. Это можно выразить в SQL следующим образом:

select   count(1)
from     YourTable
where    (@start >= Start and @start <= End) /* contains start */
or       (@end >= Start and @end <= End) /* contains end */
or       (@start < Start and @end > End) /* wraps range */

То, как вы в действительности выполняете этот запрос к базе данных, зависит от того, как вы делаете доступ к данным в данный момент.

2 голосов
/ 15 ноября 2009

Самая простая проверка перекрытия - это посмотреть, началось ли новое событие до окончания другого события и закончилось ли после его начала. Если оба условия выполняются, новое событие перекрывается со старым.

select   *
from     YourTable
where    @start < End and @end > Start
...