3 日前のすべての行を返すクエリがあります。
SELECT * FROM table2
WHERE CONVERT(date, given_schedule)
= CONVERT(date, DATEADD(d, -3, GETDATE()))
しかし、行を現在の時刻からの相対時間のみに制限することを知りたいです。たとえば、現在は午後 9 時以降であり、3 日前の午後 9 時から午後 10 時の間に発生した行のみを取得したいとします。
3 日前のすべての行を返すクエリがあります。
SELECT * FROM table2
WHERE CONVERT(date, given_schedule)
= CONVERT(date, DATEADD(d, -3, GETDATE()))
しかし、行を現在の時刻からの相対時間のみに制限することを知りたいです。たとえば、現在は午後 9 時以降であり、3 日前の午後 9 時から午後 10 時の間に発生した行のみを取得したいとします。
SELECT columns FROM dbo.table2
WHERE
CONVERT(DATE, given_schedule)
= CONVERT(DATE, DATEADD(DAY, -3, CURRENT_TIMESTAMP))
AND
DATEPART(HOUR, given_schedule)
= DATEPART(HOUR, CURRENT_TIMESTAMP);
@Haboのポイントに対処するには、次のこともできます。
DECLARE @s SMALLDATETIME = CURRENT_TIMESTAMP;
SET @s = DATEADD(DAY, -3, DATEADD(MINUTE, -DATEPART(MINUTE, @s), @s));
SELECT columns FROM dbo.table2
WHERE given_schedule >= @s
AND given_schedule < DATEADD(HOUR, 1, @s);
given_schedule
もちろん、これは、先頭列がのインデックスが実際にある場合に最も役立ちます。
DATEDIFF関数を使用して、datepart引数として時間を渡すことができます。
SELECT * FROM table2 WHERE DATEDIFF(hour, GETDATE(), given_schedule,) BETWEEN 0 AND 1
詳細については、こちらをご覧ください。