0

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

1- StartTime 作为 int 2-EndTime 作为 int

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

如果 Current time 的小时值大于 starttime 并且 Current time 的小时值小于 Endtime IN 24HOURS FORMAT ,我正在执行查询。

现在问题来了。

如果 StartTime = 19 并且 Endtime = 7(早上)

如果当前小时值返回 20

然后 20 > 19 是真的,但是 20<7 这个值是假的....

20 在晚上 7 点和早上 7 点之间到来......但是这个查询得到了错误的异常......

请帮我解决这个问题......

我将非常非常非常感谢你们......

我再次详细解释这个问题

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

就像晚上 8:00:00 一样,这只会返回 20

在我的表中,我将开始时间和结束时间存储为整数值

比如开始时间 - 19 结束时间 - 7

所以现在 20 将与两个值进行比较

20 > 19 ---- 真 20 < 7 ----- 这会是假的

但根据我的情况,它应该是正确的,因为我正在检查晚上 8 点和早上 7 点......晚上 8 介于晚上 7 和早上 7 之间(这是我在 starttime 和 endtime 中定义的)

4

3 回答 3

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     
于 2013-05-17T08:56:11.823 回答
0

解决方案非常简单:

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

请注意,如果 @Date 也可以是“第二天早上”,它(和 NOTHING)将不起作用。

于 2013-05-17T08:49:20.810 回答
0

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

如果日期对您不重要

WHERE
(
    @CurrentTime > StartTime 
    AND StartTime > EndTime
)
OR
(
    @CurrentTime > StartTime 
    AND StartTime < EndTime
    AND @CurrentTime < EndTime
)
于 2013-05-17T08:17:54.680 回答