2015-10-30 4 views
-2

Учитывая диапазон дат ввода, например, 11/1/2015 - 11/15/2015, что является наиболее эффективным способом определения, какие события (CalendarEvents) идут в течение заданного диапазона дат.Учитывая диапазон дат, найдите события, которые перекрываются в этом диапазоне

event   eventStart  eventEnd 
================================== 
expo   10/25/2015 11/4/2015  //This should be selected. 

concert  11/4/2014  11/5/2015  //This should be selected. 

exhibit  11/15/2015  12/1/2015  //this should be selected. 

display  10/26/2015 10/29/2015  //this should NOT be selected. 

Linq или SQL-сервер был бы замечательным. В основном заданный диапазон дат, найдите события, которые перекрываются в этом диапазоне.

Я знаю, что могу «переборщить» с небольшим количеством кода, просто интересно, не хватает ли мне чего-то более элегантного?

ответ

2

Вы можете использовать StartA <= EndB AND EndA >= StartA получить перекрывающихся даты:

DECLARE @startDate DATE = '20151101', 
     @endDate DATE = '20151115' 
SELECT * 
FROM CalendarEvents 
WHERE 
    eventStart <= @endDate 
    AND eventEnd >= @startDate 

SQL Fiddle

Reference

+0

Удивительный !! Спасибо! Я действительно должен отрезать себя после 12 часов кодирования с этого момента;) –

+0

Не забывайте случай, когда у вас есть событие, полностью закрывающее ваше окно. (например, 10/31-11/16 полностью охватывает 11/1-11/15) – lyrisey

+0

Отличный момент, спасибо! –

Смежные вопросы