1

我使用的是 MS SQL server 2008。这里我需要将新输入的事件开始时间和结束时间与现有事件时间进行比较。在数据库中,我需要检查新的开始时间和结束时间值,并且时间段不应与现有/已预订的事件时间匹配。

我需要在数据库存储过程中检查这个条件,如果条件满足则只接受该事件。最好的例子是会议厅预订。

4

5 回答 5

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 = 用户输入的开始时间,

@ENDTIME =用户输入的结束时间

于 2013-07-24T06:50:37.857 回答
0

您可以在逻辑中使用 24 小时格式来解决此问题。您必须将现有的事件时间保存在数据库中。每当输入新的事件时间时,您需要将现有的开始和结束时间与以前的时间进行比较。

例如:

事件 1:x1 到 y1

事件2;x2 到 y2

if(x2==x1 && y2==y1)

if(x2>x1 &&x2<y1) andif(y2<y1)

...根据您的要求。

于 2013-07-18T12:06:25.520 回答
0

答案是(StartA <= EndB) and (EndA >= StartB)。请阅读以下内容:确定两个日期范围是否重叠

于 2013-07-18T13:11:14.893 回答
0

嘿 Sanjeev 试试下面的代码..!

从您的活动中选择 *

WHERE ('A' BETWEEN StartTime AND EndTime ) 或 ('B' BETWEEN StartTime AND EndTime )

注意:这里 A 和 B 是您的开始时间和结束时间,

斜体是您的数据库值。

于 2013-07-18T14:06:22.307 回答
0

如果我理解正确,这应该可以解决问题。

让我们以AB为您的开始时间。XY以前在数据库中。

然后(A,B)在X > BY < A时不超过(X,Y) ,这可以被告知,因为新事件必须在前一个事件之前完成,或者它必须在之前可用的事件之后开始。所以查询必须是

...
Where NewStartTime > EndTime or NewEndTime < StartTime;
于 2013-07-19T08:55:26.493 回答