2016-08-11 9 views
1

私は現在の日の午前6時から翌日の午前6時までのデータを取得する必要があります。私は午前6時から午前6時までを1日とみなさなければならない。私は午前6時から午後11時59分までデータを取り出すことができます。残っていれば翌日の6時間も前日に考慮する必要があります。データを取得するためのさまざまな方法を試しましたが、私には解決策がありませんでした。 現在の午前6時から翌日にフェッチするクエリ6am

SGHH.DateTime >= DATEADD(HOUR,6,CONVERT(VARCHAR(10), GETDATE(),120)) 
AND SGHH.DateTime <= DATEADD(HOUR,6,CONVERT(VARCHAR(10), GETDATE()+1,120)) 

は、この方法を試してみましたが、午後11時59分のGETDATE()の後、翌日に分類されます現在のデータとGETDATE()+ 1をもたらすでしょう。

午前6時から午後6時までの間にデータを取得するためのサンプルクエリを共有できますか?

+0

現在の6-6サイクルをフェッチする場合は、whereステートメントにcaseステートメントを追加できます。例えばあなたが実際の真夜中の境界に達すると、次の想定日が始まる6時間前にまだあなたの想定日が傷ついていますが、datepart(時、getdate())<6 then ... – ZLK

答えて

0

あなたが唯一GETDATE()のうち、日付部分を取っていることを達成することができ、今日の深夜時間に6時間を追加する必要があります。

DECLARE @TODAY DATETIME2 = DATEADD(HOUR, 6, CONVERT(DATE, GETDATE())); 

SGHH.DateTime >= @TODAY 
AND 
SGHH.DateTime <= DATEADD(DAY, 1, @TODAY) 
+0

それは彼がもちろん望んでいない限り、24時間前に転送することです。 – Cato

+0

@AndrewDeightonこれは、ビジネスルールに基づいた単純なif文になります。 – user3185569

0

何が必要時間は6時間前、中だったということですあなたが現在1日として使用している実際の日。したがって、6時間前のものは前日に落ちるでしょう。

CONVERT(VARCHAR(10), GETDATE(),120) <= dateadd(hour,-6,SGHH.DateTime) 
    AND dateadd(hour,-6,SGHH.DateTime) < CONVERT(VARCHAR(10), dateadd(day,1,GETDATE()) ,120) 
関連する問題