我有下表:
Id Start End
1 2019-01-28 07:00:00 2019-01-28 17:00:00
2 2019-01-28 17:01:00 2019-01-28 02:00:00
我想要做的是检查我运行查询时当前时间是否介于 id 1 或 2 之间。这是我的查询。
SELECT Id FROM MyTableName
WHERE CONVERT(varchar(5), GETDATE(), 108)
BETWEEN CONVERT(varchar(5), Start, 108) AND
CONVERT(varchar(5), End, 108)
如果我从 07 小时到 17 小时(Id 1)运行查询,目前工作正常,但是当我在 17:01 之后尝试查询时,查询没有显示任何结果。玩我的查询,我发现这是因为 02:00 小时(id 2,02:00 表示凌晨 2 点)。
我该如何处理?
根据您在评论中给出的反馈,我认为在不使用表的情况下在单个查询中实现您想要的内容的最佳方法实际上是可能的。
SELECT CASE
WHEN (GETDATE() > SMALLDATETIMEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE()), 7, 00)) AND (GETDATE() < SMALLDATETIMEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE()), 17, 00)) THEN 1
WHEN (GETDATE() > SMALLDATETIMEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE()), 4, 00)) AND (GETDATE() < SMALLDATETIMEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE())+1, 2, 00)) THEN 2
ELSE NULL END AS ID
如果时间在 07:00 和 17:00 之间,上面的查询将返回 ID 1,如果时间在 17:00 和 02:00(第二天)之间,则返回 ID 2,如果时间在这两个窗口之外,则返回 NULL .
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句