1

我的每周日程安排从周五晚上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

这里的复发是每周一次。

问候,

贪婪

4

2 回答 2

0

如果我对您的理解正确,您想检查日期是否介于周三和周一之间。

在这种情况下,您可以简单地做 a SELECT DATENAME(WEEKDAY, '6-Jun-2011'),如果那是您有答案的日子之一,那么您只需要检查时间组件。

于 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 回答