每周时间表在几天之间

时间:2011-06-02 05:54:18

标签: sql-server time range schedule

我每周安排从周五晚上 2011-05-27 18:00 到周一早上 2011-05-30 06:00 。每周执行的此计划从 2011-05-27 开始。我们如何确定活动时间(2011-06-06 19:00)介于这个每周时间表之间?

更新

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

这里每周复发一次。

此致

Greepty

2 个答案:

答案 0 :(得分:0)

如果我理解正确,你想检查一个日期是否会介于星期三和星期日之间。周一

在这种情况下,你可以简单地做一个SELECT DATENAME(WEEKDAY, '6-Jun-2011'),如果有一天你有答案,你只需要检查时间组件。

答案 1 :(得分:0)

解决此问题的可能方法:

  1. 获取指定日期/时间与StartTime之间的整周数。

  2. 将周数添加到StartTime以获取最新的开始时间。

  3. 计算最近开始时间与给定日期/时间之间的差异。

  4. 检查该差异是否小于TimeDifferenceInSeconds

  5. 这就是它的实施方式:

    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)