获取两个日期之间的时间

Getting time between two dates

我有以下 table:

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 点)。

我该如何处理?

根据您在评论中提供的反馈,我认为在不使用 table 的情况下在单个查询中实际上可以实现您想要的最佳方式。

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之间,上面的查询将return ID 1,如果时间在17:00和02:00之间,则ID 2 (第二天)和 NULL 如果时间在这些 windows.

中的任何一个之外