是否正确:
SELECT *
FROM tablename
WHERE dtdatetime BETWEEN DATEADD(hh, -1, GETDATE()) AND DATEADD(hh, -2, GETDATE())
hh
这样的懒惰速记。 Here's why。BETWEEN
。 Here's why。无论如何,它要求第一个参数更小-您的问题实际上是您在说WHERE 2 BETWEEN 3 AND 1
,只有将其翻转到WHERE 2 BETWEEN 1 AND 3
才会返回true。继续尝试-较小的论点需要首先解决。但实际上,无论如何都不要使用BETWEEN
进行日期范围查询。WHERE dtdatetime >= DATEADD(HOUR, -2, GETDATE())
AND dtdatetime < DATEADD(HOUR, -1, GETDATE());
请注意,这将根据您在当前小时内的运行时间得出不同的结果。例如,如果您在12:32运行它,它将给出数据> = 10:32和<11:32。如果您希望数据> = 10:00和<11:00,无论它是在12:04还是12:32或12:59上运行,那么您都需要它:
DECLARE @TopOfHour DATETIME; SET @TopOfHour = DATEADD(HOUR, DATEPART(HOUR, GETDATE()), DATEDIFF(DAY, 0, GETDATE())); SELECT ... WHERE dtdatetime >= DATEADD(HOUR, -2, @TopOfHour) AND dtdatetime < DATEADD(HOUR, -1, @TopOfHour);