0

非工作时间计算

一个非工作时间日历定义如下,这里 WeekNumber 从 1 = 星期一到 5 = 星期五开始

CalendarId WeekNumber   StartTime           EndTime         
600         1           1900-01-01 00:00    1900-01-01 08:00    
600         1           1900-01-01 18:00    1900-01-01 23:59    
600         2           1900-01-01 00:00    1900-01-01 08:00    
600         2           1900-01-01 18:00    1900-01-01 23:59    
600         3           1900-01-01 00:00    1900-01-01 08:00    
600         3           1900-01-01 18:00    1900-01-01 23:59    
600         4           1900-01-01 00:00    1900-01-01 08:00    
600         4           1900-01-01 18:00    1900-01-01 23:59    
600         5           1900-01-01 00:00    1900-01-01 08:00    
600         5           1900-01-01 18:00    1900-01-01 23:59    

我想将此日历应用于另一个名为 events 的表以查找这些日期和时间的记录?

编辑

事件表结构如下

EventID StartDateTime       TotalTimeInSec  WeekNumber  
1       2009-07-05 07:44     100                1 
2       2009-07-05 08:40     200                1
3       2009-07-05 09:35     150                1
4       2009-07-05 10:37     200                1
5       2009-07-05 19:37     200                1
6       2009-07-05 20:37     200                1

所需的输出将在应用日历之后

EventID StartDateTime       TotalTimeInSec  WeekNumber  
1       2009-07-05 07:44     100                1 
5       2009-07-05 19:37     200                1
6       2009-07-05 20:37     200                1
4

3 回答 3

1
 Select a.WeekNumber,a.startDateTime,b.starttime,b.EndTime
 from tblEvents a,(Select WeekNumber,Starttime,EndTime  from tblMain) b
 where a.startDateTime between b.starttime and b.EndTime
 and a.WeekNumber = b.WeekNumber
于 2012-07-06T09:26:33.547 回答
0

我不相信完全外部联接是您所要求的。而另一个答案似乎没有处理您将时间范围存储为日期时间值的方法。唯一棘手的部分似乎是处理日期数学。您可以找到不同的方法来进行检查,但我认为这是一种解决方案。

SELECT e.*
FROM
    Events as e INNER JOIN Calendar as c
        ON c.WeekNumber = e.WeekNumber
WHERE
    /* CAST(CAST(e.StartDateTime AS TIME) AS DATETIME) -- later versions */
    e.StartDateTime - DATEADD(dd, DATEDIFF(dd, 0, e.StartDateTime), 0)        
        BETWEEN c.StartTime and e.EndTime
于 2012-07-07T22:55:31.383 回答
0
Select E.*
From tblEvent E
Full outer Join tblMain M on E.WeekNumber = M.WeekNumber
Where E.StartDateTime Between M.StartTime and M.EndTime
于 2012-07-06T09:43:07.510 回答