我想做一个SQL Server来选择(2小时前)之间的日期范围(1小时前)
这是否正确:
SELECT *
FROM tablename
WHERE dtdatetime BETWEEN DATEADD(hh, -1, GETDATE()) AND DATEADD(hh, -2, GETDATE())
答案 0 :(得分:26)
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运行它,它将提供数据&gt; = 10:32和&lt; 11:32。如果您想要数据&gt; = 10:00和&lt; 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);