SQL从2小时前选择数据[关闭]

问题描述 投票:12回答:1
我想做一个SQL Server来选择选择(1小时前)之间(2小时前)的日期范围

是否正确:

SELECT * FROM tablename WHERE dtdatetime BETWEEN DATEADD(hh, -1, GETDATE()) AND DATEADD(hh, -2, GETDATE())

sql sql-server datetime getdate
1个回答
41
投票
    不要使用像hh这样的懒惰速记。 Here's why
  • 请勿使用BETWEENHere'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);

  • © www.soinside.com 2019 - 2024. All rights reserved.