【发布时间】:2019-11-11 01:45:49
【问题描述】:
可以使用新鲜的 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
【问题讨论】:
-
请以文本而非图像形式显示一些示例数据和预期结果
-
感谢和抱歉格式化。我是stackoverflow的新手,所以需要积累经验。 '标识 |开始时间 |午夜-2135024021 | 2019-10-02 00:04:01.000 | 2019-10-02 00:00:00.000 |五上午 | BETWEEN_Check 2019-10-02 05:04:01.000 | 1 -2135024020 | 2019-10-01 05:27:25.000 | 2019-10-01 00:00:00.000 | 2019-10-01 10:27:25.000 |1 -2135024020 | 2019-10-01 05:58:43.000 |2019-10-01 00:00:00.000 | 2019-10-01 10:58:43.000 |1 '最后两行应显示 0,因为时间已超过凌晨 5 点。每行以 -213502 开头
-
请用这些信息更新您的问题,不要发表评论
-
奇怪的是
DATEADD(hh, +4 , DATEDIFF(d, 0, StartTime)) AS FourAM导致2019-10-02 00:04:00.000。您的系统必须添加公制小时,每个小时只有一英制分钟。 -
谢谢哈宝。你的意思是应该是 04:00:00 而不是 00:04:00
标签: sql-server tsql between sqldatetime