SQL从2小时前选择数据

Jay*_*Jay 10 sql sql-server datetime getdate

我想做一个SQL Server来选择(2小时前)之间的日期范围(1小时前)

它是否正确:

SELECT * 
FROM tablename 
WHERE dtdatetime BETWEEN DATEADD(hh, -1, GETDATE()) AND DATEADD(hh, -2, GETDATE())
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 32

  • 不要使用懒惰的速记之类的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());
Run Code Online (Sandbox Code Playgroud)

请注意,这会产生不同的结果,具体取决于您在当前时间运行它的时间.例如,如果您在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);
Run Code Online (Sandbox Code Playgroud)