2013-10-10 33 views
2

SQL選擇數據我想要做一個SQL Server選擇之間(1小時前)從2小時前

選擇的日期範圍(2小時前)這是正確的:

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

不要問什麼是的正確與否,只需嘗試一下。結果是你期望的嗎?如果是這樣,那麼你做對了。如果不是,請回來併發布你正在做的事情,你期望什麼以及你正在獲得什麼。 – NotMe

回答

21
  • 不要使用懶惰速記,如hhHere's why
  • 請勿使用BETWEENHere's why。無論如何,它要求第一個參數是較小的一個 - 你的問題實際上是你說的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);