SQL BETWEEN时间不显示结果

时间:2019-11-11 01:45:49

标签: sql-server tsql between sqldatetime

可以使用新的POV帮助:)

需要显示午夜至凌晨4点之间的旅行。 StartTime列的类型为DATETIME。我已经尝试过

CAST(StartTime AS TIME) BETWEEN CAST('00:00:00' AS TIME) AND....

但是它没有显示正确的结果,所以我已经完成了IIF,但是即使StartTime不在午夜和凌晨4点之间,结果仍然显示1.我是否缺少某些内容? ?感谢您的帮助!

SELECT 
    id
,   StartTime
,   DATEADD(d, 0, DATEDIFF(d, 0, StartTime)) AS Midnight
,   DATEADD(hh, +4 , DATEDIFF(d, 0, StartTime)) AS FourAM
,   IIF((StartTime BETWEEN DATEADD(d, 0, DATEDIFF(d, 0, StartTime))
                      AND DATEADD(hh, +4 , DATEDIFF(d, 0, StartTime))), 1, 0) _Between_Check
FROM 
    FUN.Trip

结果:

ID          | StartDate             | Midnight                | FourAM                  | Between_Check
------------+-----------------------+-------------------------+-------------------------+--------------
-2135024021 | 19-10-02 00:04:01.000 | 2019-10-02 00:00:00.000 | 2019-10-02 00:04:00.000 | 1
-2135024228 | 19-10-05 00:04:30.000 | 2019-10-05 00:00:00.000 | 2019-10-05 00:04:00.000 | 1

以上是我得到的结果。 Between_Check栏应显示0,因为StartDate是凌晨4点之后的一分钟

这就是我应该得到的

结果:

ID          | StartDate             | Midnight                | FourAM                  | Between_Check
------------+-----------------------+-------------------------+-------------------------+--------------
-2135024021 | 19-10-02 00:04:01.000 | 2019-10-02 00:00:00.000 | 2019-10-02 00:04:00.000 | 0
-2135024228 | 19-10-05 00:02:30.000 | 2019-10-05 00:00:00.000 | 2019-10-05 00:04:00.000 | 0

2 个答案:

答案 0 :(得分:0)

如果要检查时间是否在午夜到凌晨4点之间,为什么不直接使用datepart(hour, {datetime})

IIF (DATEPART(HOUR, StartTime) BETWEEN 0 AND 4, 1, 0)

或者,将数据类型从CONVERT()StartTimetime,然后与时间字符串进行比较

IIF (CONVERT(TIME, StartTime) BETWEEN '00:00' AND '04:00', 1, 0)

IIF (CONVERT(TIME, StartTime) >= '00:00' AND CONVERT(TIME, StartTime) < '04:00', 1, 0)

不确定您希望时间04:00是否包含在内。无论如何,以上是您可以使用的各种选项

您在这里所做的事情将永远是真实的

IIF(
        (StartTime BETWEEN 
                                DATEADD(d, 0, StartTime) 
                            AND DATEADD(hh, +4, StartTime))
        , 1, 0) 

因为DATEADD(d, 0, StartTime)基本无效,并且等于StartTime

答案 1 :(得分:0)

答案是在HABO评论中,这些评论使我着眼于结果集。