这有点复杂,所以我会尽力解释下面的一切。我已经搜索了一下,我只是无法让它们一起工作。
我有以下表格:
Events
----------------
ID int
Name varchar(100)
StartDate datetime
EndDate datetime
EventDaysOfWeek
------------------
EventID int
DayOfWeekNumber int
EventDateExceptions
--------------------
EventID int
ExceptionDate datetime
我需要做的是获得一个月的所有事件。但是任何事件都可以有任意数量的日期例外(事件未发生的日期),并且事件可以设置为仅在一周中的某些天运行(例如,仅在周二和周四)。以下是我到目前为止的 proc 代码(显然没有完成),它在传入的开始日期和结束日期之间获取任何事件,在这种情况下,它将是月初和月底。
Declare @first datetime,
@last datetime
Set @first = '3/1/2013' --first date in the range being checked
Set @last = '3/31/2013' --last date in the range being checked
select * from events
where
(startdate BETWEEN @first AND @last -- starts in month
or enddate BETWEEN @first AND @last) -- ends in month
or ((startDate <= @first and endDate >= @last )) -- spans the entire date range
编辑:
以下是关于我的问题的一些额外细节:
一个事件从开始到结束日期连续运行
如果添加了日期例外,则事件将不会在该日期发生
星期表将确定事件发生的星期几(例如,如果事件在 3 月 1 日 = 3 月 31 日运行,则可以将星期几设置为星期四,这意味着事件只会在星期四之间运行开始和结束日期)
最初我的问题措辞错误。我并不想优化我必须太多的代码(尽管您的建议很受赞赏)我正在寻找有关我的查询的帮助,以使其返回在开始日期和结束日期之间发生的所有事件,但还要考虑日期异常和为事件设置的星期几。