これは少し複雑なので、以下のすべてを説明するために最善を尽くします。私はこれを少し探しましたが、すべてを一緒に機能させるのに問題があります。
私は次のテーブルを持っています:
Events
----------------
ID int
Name varchar(100)
StartDate datetime
EndDate datetime
EventDaysOfWeek
------------------
EventID int
DayOfWeekNumber int
EventDateExceptions
--------------------
EventID int
ExceptionDate datetime
私がする必要があるのは、1か月間のすべてのイベントを取得することです。ただし、どのイベントにも任意の数の日付例外(イベントが発生しない日付)があり、イベントは特定の曜日(火曜日と木曜日のみなど)にのみ実行されるように設定できます。以下は、渡された開始日と終了日の間にイベントを取得する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日に実行される場合、曜日を木曜日に設定できます。これは、イベントが木曜日にのみ実行されることを意味します。開始日と終了日)
もともと私は自分の質問を間違って言いました。私は必要なコードを最適化するつもりはありません(あなたの提案はありがたいですが)開始日と終了日の間に発生するすべてのイベントを返すようにクエリを取得するためのヘルプを探していますが、日付の例外も考慮に入れていますイベントに設定された曜日。