我使用的是 MS SQL server 2008。这里我需要将新输入的事件开始时间和结束时间与现有事件时间进行比较。在数据库中,我需要检查新的开始时间和结束时间值,并且时间段不应与现有/已预订的事件时间匹配。
我需要在数据库存储过程中检查这个条件,如果条件满足则只接受该事件。最好的例子是会议厅预订。
我使用的是 MS SQL server 2008。这里我需要将新输入的事件开始时间和结束时间与现有事件时间进行比较。在数据库中,我需要检查新的开始时间和结束时间值,并且时间段不应与现有/已预订的事件时间匹配。
我需要在数据库存储过程中检查这个条件,如果条件满足则只接受该事件。最好的例子是会议厅预订。
SELECT @count = COUNT (EventID) FROM TblEvent WHERE (('@STARTTIME' BETWEEN StartTime AND EndTime) or ('@ENDTIME' BETWEEN StartTime AND EndTime));
IF @count = 0
Begin
Select @count = COUNT (EventID) FROM TblEvent WHERE (('@STARTTIME' < StartTime and '@ENDTIME' > EndTime));
END
IF @count > 0
BEGIN
SELECT 'Event is Already Exists at that point of time please select another Time ' AS 'MESSAGE';
END
Else
BEGIN
//ADD QUERY TO SAVE THE THE EVENT IN DB//
SELECT 'Event is Added' AS 'MESSAGE';
END
笔记:
@STARTTIME = 用户输入的开始时间,
@ENDTIME =用户输入的结束时间
您可以在逻辑中使用 24 小时格式来解决此问题。您必须将现有的事件时间保存在数据库中。每当输入新的事件时间时,您需要将现有的开始和结束时间与以前的时间进行比较。
事件 1:x1 到 y1
事件2;x2 到 y2
if(x2==x1 && y2==y1)
if(x2>x1 &&x2<y1) andif(y2<y1)
...根据您的要求。
答案是(StartA <= EndB) and (EndA >= StartB)
。请阅读以下内容:确定两个日期范围是否重叠
嘿 Sanjeev 试试下面的代码..!
从您的活动中选择 *
WHERE ('A' BETWEEN StartTime AND EndTime ) 或 ('B' BETWEEN StartTime AND EndTime )
注意:这里 A 和 B 是您的开始时间和结束时间,
斜体是您的数据库值。
如果我理解正确,这应该可以解决问题。
让我们以A和B为您的开始时间。X和Y以前在数据库中。
然后(A,B)在X > B或Y < A时不超过(X,Y) ,这可以被告知,因为新事件必须在前一个事件之前完成,或者它必须在之前可用的事件之后开始。所以查询必须是
...
Where NewStartTime > EndTime or NewEndTime < StartTime;