1

2011年5月27日金曜日の夕方18:00から2011年5月30月曜日の朝 までの週次スケジュールを設定しています。毎週実行されるこのスケジュールは、2011年5月27日から始まります。イベント時間(2011-06-06 19:00)がこの週のスケジュールの間にあることをどのように特定できますか?

アップデート

ID    StartTime         EndTime            Recurrence  TimeDifferenceInSeconds
1     2011-05-27 18:00  2011-05-30 06:00   1           216000

ここでの再発は1週間ごとです。

よろしく、

グリープティ

4

2 に答える 2

0

私があなたを正しく理解しているなら、あなたは日付が水と月の間にあるかどうかをチェックしたいと思います。

その場合、あなたは単にaSELECT DATENAME(WEEKDAY, '6-Jun-2011')をすることができます、そしてそれがあなたが答えを持っている日の1つに当てはまるなら、あなたはただ時間要素をチェックする必要があるでしょう。

于 2011-06-02T11:42:26.840 に答える
0

この問題への可能なアプローチ:

  1. 指定された日付/時刻から までの週数を取得しStartTimeます。

  2. に週数を追加しStartTimeて、最新の開始時刻を取得します。

  3. 最遅開始時刻と指定された日付/時刻の差を計算します。

  4. その差が より小さいかどうかを確認しTimeDifferenceInSecondsます。

そして、これを実装する方法は次のとおりです。

SELECT *
FROM Schedules
WHERE StartTime < @Date AND TimeDifferenceInSeconds >
  DATEDIFF(ss, DATEADD(week, DATEDIFF(day, StartTime, @Date) / 7, StartTime), @Date)

@Dateこれにより、該当するすべてのスケジュールが返されます。

より読みやすいバージョン:

WITH NewSchedules AS (
  SELECT
    *,
    NewStartTime = DATEADD(week, DATEDIFF(day, StartTime, @Date) / 7, StartTime)
  FROM Schedule
  WHERE StartTime < @Date
)
SELECT *
FROM NewSchedules
WHERE TimeDifferenceInSeconds > DATEDIFF(ss, NewStartTime , @Date)
于 2011-06-02T15:00:06.497 に答える