SQL Serverを使用して、(1時間前)から(2時間前)の日付範囲を選択することを選択します
これは正しいです:
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のデータが得られます。 12:04、12:32、12:59のいずれで実行するかに関係なく、10:00以上11:00未満のデータが必要な場合は、代わりに次のようにします。
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);