我正在使用MS SQL server 2008.在这里,我需要将新输入的开始时间和事件的结束时间与现有事件计时进行比较。在数据库中,我需要检查新的开始时间和结束时间值以及时间段与现有/已预订的事件时间不匹配。
我需要在数据库存储过程中检查这个条件,如果条件满足则只接受该事件。最好的例子是会议厅预订。
答案 0 :(得分:1)
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 = USER ENTERED START TIME,
@ENDTIME = USER ENED END TIME
答案 1 :(得分:0)
您可以使用24小时格式在逻辑中解决此问题。您必须在数据库中保存现有的事件计时。无论何时输入新的事件时间,您都需要与现有的开始和时间进行比较。与以前的结束时间。
事件1:x1到y1
事件2; x2到y2
if(x2==x1 && y2==y1)
if(x2>x1 &&x2<y1) andif(y2<y1)
......根据您的要求等等。
答案 2 :(得分:0)
答案是(StartA <= EndB) and (EndA >= StartB)
。请阅读以下内容:Determine Whether Two Date Ranges Overlap
答案 3 :(得分:0)
嘿Sanjeev尝试以下代码..!
从您的活动中选择*
WHERE('A'在 StartTime 和 EndTime 之间)或('B'BETWEEN StartTime AND EndTime )
注意: 这里A和B是你的开始时间和结束时间,
和斜体是您的数据库值。
答案 4 :(得分:0)
如果我理解正确,这应该可以解决问题。
让我们以 A 和 B 为您的开始时间。 X 和 Y 以前位于数据库中。
当 X&gt;时,(A,B)不会超过(X,Y)。 B 或 Y&lt;一个这可以被告知,因为新事件必须在前一个事件之前完成,或者它必须在之前可用事件之后开始。所以查询必须是
...
Where NewStartTime > EndTime or NewEndTime < StartTime;