我每周安排从周五晚上 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
答案 0 :(得分:0)
如果我理解正确,你想检查一个日期是否会介于星期三和星期日之间。周一
在这种情况下,你可以简单地做一个SELECT DATENAME(WEEKDAY, '6-Jun-2011')
,如果有一天你有答案,你只需要检查时间组件。
答案 1 :(得分:0)
解决此问题的可能方法:
获取指定日期/时间与StartTime
之间的整周数。
将周数添加到StartTime
以获取最新的开始时间。
计算最近开始时间与给定日期/时间之间的差异。
检查该差异是否小于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)