2
SQL選擇數據我想要做一個SQL Server選擇之間(1小時前)從2小時前
選擇的日期範圍(2小時前)這是正確的:
SELECT *
FROM tablename
WHERE dtdatetime BETWEEN DATEADD(hh, -1, GETDATE()) AND DATEADD(hh, -2, GETDATE())
SQL選擇數據我想要做一個SQL Server選擇之間(1小時前)從2小時前
選擇的日期範圍(2小時前)這是正確的:
SELECT *
FROM tablename
WHERE dtdatetime BETWEEN DATEADD(hh, -1, GETDATE()) AND DATEADD(hh, -2, GETDATE())
hh
。 Here's why。BETWEEN
。 Here'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);
不要問什麼是的正確與否,只需嘗試一下。結果是你期望的嗎?如果是這樣,那麼你做對了。如果不是,請回來併發布你正在做的事情,你期望什麼以及你正在獲得什麼。 – NotMe