SQL Server日期/时间重叠检查以进行事件安排

use*_*221 5 sql sql-server-2008

我有一个事件表,其中包含以下列:

StartDate datetime
EndDate datetime
StartTime nvarchar(10)
EndTime nvarchar(10)
Run Code Online (Sandbox Code Playgroud)

假设一条记录在表中具有这些值:

StartDate: 2011-12-22 00:00:00.000
EndDate: 2011-12-22 00:00:00.000
StartTime: 4:00 PM
EndTime: 5:00 PM
Run Code Online (Sandbox Code Playgroud)

现在,如果有人来安排活动,我需要确保他不能在同一时间或在现有活动的开始时间和结束时间之间安排活动。

因此,他可以安排从5:00 PM到6:00 PM或从11:00 AM到4:00 PM,但不能从11:00 AM到5:00 PM或4:30 PM到5:00 PM。

我该如何检查?我知道这不是该表的最佳设计,但是我必须坚持这种设计,否则我们将不得不更改很多中间层和客户端代码。

Spa*_*rky 0

尝试这个

declare @apptDate DATETIME

SET @apptDate = '12/22/2011 4:30PM'
select COUNT(*) 
from t1
where @apptDate Between
CAST( StartDate+StartTime as DateTime) and CAST( EndDate+EndTime as DateTime)  

SET @apptDate = '12/22/2011 6:30PM'
select COUNT(*) 
from t1
where @apptDate Between
CAST( StartDate+StartTime as DateTime) and CAST( EndDate+EndTime as DateTime)  
Run Code Online (Sandbox Code Playgroud)

如果 count(*) > 0,则存在约会。如果没有的话,这个位置是免费的