可以使用新的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
答案 0 :(得分:0)
如果要检查时间是否在午夜到凌晨4点之间,为什么不直接使用datepart(hour, {datetime})
IIF (DATEPART(HOUR, StartTime) BETWEEN 0 AND 4, 1, 0)
或者,将数据类型从CONVERT()
到StartTime
至time
,然后与时间字符串进行比较
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评论中,这些评论使我着眼于结果集。