夜间和早晨时间的时间比较

时间:2013-05-17 07:47:50

标签: sql sql-server-2008

我有一个包含两列的表,其中包含一个整数值

1- StartTime as int 2-EndTime as int

现在我必须将当前时间的小时值与这些时间进行比较。

我正在执行查询,如果当前时间的小时值大于启动时间,当前时间的小时值小于结束时间IN 24HOURS FORMAT

现在的问题是。

如果StartTime = 19和 结束时间= 7(早上)

如果当前小时值返回20

然后20&gt; 19它的真实但20 <7这个值变得虚假......

20日晚7点到早上7点之间......但是这个查询正在变得虚假异常......

请帮帮我......

我将非常非常感谢你们所有人.....

我再次详细解释这个问题

DATEPART(hh,GETDATE())---这个函数会给我一个小时的值

就像下午8:00:00一样,这将只返回20

在我的表中,我将starttime和endtime存储为Integer值

像开始时间一样 - 19       结束时间 - 7

所以现在20将与两个值比较,如

20&gt; 19 ----真的 20&lt; 7 -----这会是假的

但根据我的情况,它应该是正确的,因为我正在检查晚上8点,早上7点......晚上8点到晚上7点到早上7点(这是我在开始时间和结束时间)

3 个答案:

答案 0 :(得分:1)

DECLARE @current_Hour INT
SELECT @current_hour = DATEPART(HH,GETDATE())
--SELECT @current_hour = 20

DECLARE @startTime INT
SET @startTime = 19
DECLARE @endtime INT
set @endTime = 7

SELECT 
    CASE 
        WHEN @startTime <= @endTime THEN 
            CASE WHEN @current_hour BETWEEN @startTime AND @endtime THEN 1 ELSE 0 END
        ELSE
            CASE WHEN @current_hour BETWEEN @endtime AND @startTime THEN 0 ELSE 1 END
    END     

答案 1 :(得分:0)

如果您没有日期数据,并且如果CurrentTime大于StartTime并且EndTime小于StartTime,您可以认为您的EndTime等于24 + EndTime(或者您可以忽略EndTime验证)但是在这种情况之外有很多可能性。你应该解释一下你的问题。

如果日期对您不重要

WHERE
(
    @CurrentTime > StartTime 
    AND StartTime > EndTime
)
OR
(
    @CurrentTime > StartTime 
    AND StartTime < EndTime
    AND @CurrentTime < EndTime
)

答案 2 :(得分:0)

解决方案非常简单:

@Date > StartTime
AND (
    @Date < EndTime
OR
    EndTime < Startime
)

请注意,如果@Date可以“早上第二天”,它(和NOTHING)将无效。