我需要检查一些值之间的 SQL 日期范围。例子。检查过去 2 到 1 小时之间添加的记录。
以下查询是否正确:
SELECT *
FROM tablename
WHERE dtdatetime BETWEEN DATEADD(hh, -1, GETDATE()) AND DATEADD(hh, -2, GETDATE())
能否请您提供建议。
我需要检查一些值之间的 SQL 日期范围。例子。检查过去 2 到 1 小时之间添加的记录。
以下查询是否正确:
SELECT *
FROM tablename
WHERE dtdatetime BETWEEN DATEADD(hh, -1, GETDATE()) AND DATEADD(hh, -2, GETDATE())
能否请您提供建议。
hh
. 这就是为什么。BETWEEN
. 这就是为什么。无论如何,它要求第一个参数是较小的参数 - 你的问题实际上是你在说WHERE 2 BETWEEN 3 AND 1
,如果你把它翻转到它只会返回 true WHERE 2 BETWEEN 1 AND 3
。继续尝试 - 较小的论点需要放在第一位。但实际上,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);