给定日期范围,查找在该范围内重叠的事件

时间:2015-10-30 01:00:44

标签: c# sql-server linq tsql c#-4.0

给定输入日期范围,例如2015年11月1日 - 2015年11月15日,确定在给定日期范围内哪些事件(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服务器会很棒。基本上给定日期范围,找到在该范围内重叠的事件。

我知道我可以"蛮力"有一些代码,只是想知道我是否错过了更优雅的东西?

1 个答案:

答案 0 :(得分: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