0

3 日前のすべての行を返すクエリがあります。

SELECT * FROM table2 
 WHERE CONVERT(date, given_schedule)
 = CONVERT(date, DATEADD(d, -3, GETDATE()))

しかし、行を現在の時刻からの相対時間のみに制限することを知りたいです。たとえば、現在は午後 9 時以降であり、3 日前の午後 9 時から午後 10 時の間に発生した行のみを取得したいとします。

4

2 に答える 2

3
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もちろん、これは、先頭列がのインデックスが実際にある場合に最も役立ちます。

于 2013-01-17T18:35:56.040 に答える
1

DATEDIFF関数を使用して、datepart引数として時間を渡すことができます。

SELECT * FROM table2 WHERE DATEDIFF(hour, GETDATE(), given_schedule,) BETWEEN 0 AND 1

詳細については、こちらをご覧ください。

于 2013-01-17T18:48:30.980 に答える