SQL - 选择特定数据范围之间的同一天的记录



我需要检查某些值之间的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,只有当你把它翻转到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);

最新更新