web-dev-qa-db-ja.com

2時間前のSQL Selectデータ

SQL Serverを使用して、(1時間前)から(2時間前)の日付範囲を選択することを選択します

これは正しいです:

SELECT * 
FROM tablename 
WHERE dtdatetime BETWEEN DATEADD(hh, -1, GETDATE()) AND DATEADD(hh, -2, GETDATE())
11
Jay
  • 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);
40
Aaron Bertrand