在两个日期之间获取时间

时间:2019-01-29 03:22:01

标签: sql sql-server sql-server-2012 sql-server-2014

我有下表:

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(标识1),此刻效果很好,但是当我在17:01之后尝试查询时,查询不会显示任何结果。玩我的查询时,我发现这是因为02:00小时(id 2,02:00表示凌晨2点)。

我该如何处理?

1 个答案:

答案 0 :(得分:1)

根据您在评论中给出的反馈,我认为实现查询所需内容的最佳方法实际上是在单个查询中根本不用表的情况。

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;如果时间在17:00和02:00(第二天)之间,则上面的查询将返回ID;如果时间在两个时间之外,则返回NULL。这些窗口中。