2017-10-04 9 views
0

今週の週の前の最後の5週間を使いたいと思っています。SQLの最後の5週間前の最後の時間

DATEADD(week, -5, GETDATE()) and DATEADD(week, -1, GETDATE()) 

私もDATEADD(week, -6, GETDATE()) and DATEADD(week, -2, GETDATE())を試してみました:今日は2017年10月4日であるので、私はこれは私が使用しているコードですが、それが何らかの理由で動作しない日付範囲が8月21日 - 9月24の間になりたいです変化は起こらないので、変だ。

誰でも助けてください。これは、SQL 2012のSQLクエリです。

+0

何が変わらないのでしょうか? – SQLChao

答えて

0

DATEADD(week, -5, GETDATE())引き数30日。週の初めまでにDATEADDを手動で実行する必要があります。これは、あなたがしようとしているような音です。

DECLARE @date datetime = GETDATE() 
DECLARE @dw nvarchar = DATENAME(dw, @date) 
IF @dw = 'Monday' SET @date = DATEADD(day, -1, @date) 
ELSE IF @dw = 'Tuesday' SET @date = DATEADD(day, -2, @date) 
.... 
WHERE hire_date between DATEADD(week, -6, @date) and DATEADD(week, -2, @date) 

このようにして、システムカルチャに依存することなく、自分で週の始まりを設定できます。

4

それぞれの式を個別に調べます。使用Management Studioの(または類似の)ちょうどこの実行するために:

SELECT DATEADD(week, -1, GETDATE()) 

をそして、あなたは(あなたがそれを実行時に比べて)このような何かわかります

2017-09-27 15:05:39.453

丁度1週間前ですそれはまだ水曜日だった。あなたは、その週の開始を日曜日にしたい。だから今、この操作を行います。

2017-09-25 00:00:00.000

クローサー:あなたにこの結果を与える

SELECT DATEADD(week, DATEDIFF(week, 0, GETDATE()) -1, 0) 

を。これは、0日目をとり、目標日からその週以降経過した週数を1つ追加することによって機能します。あなたは一週間を追加しているので、予測可能な一週間の始まりで終わります。 0日(1900年1月1日)が月曜日だったので、24日ではなく25日(月曜日)になります。

SELECT DATEADD(DAY, -1, DATEADD(week, DATEDIFF(week, 0, GETDATE()) -1, 0)) 

そして今、我々は一貫して、それが権利を取得する式から、あなたが使用することができ、日付があります:

しかし、それは 確実月曜日、そしてもう1日を占めるようになりまし十分に簡単です
2017-09-24 00:00:00.000

並べ替え日曜日または月曜日に実行する場合、特にSql Serverの設定可能な開始週値があるため、これがどのように動作するかを慎重にテストする必要があります。期待していた週境界を1つ下回ったり、超えてしまったりして、奇妙なオフ・バイ・ワンのエラーで終わることがあります。しかし、それが起こっても、この方法はあなたが歩く必要がある道にあなたを置きます。この取得するには

SELECT DATEADD(week, DATEDIFF(week, 0, GETDATE()) -6, 0) 

:もう一方の端のために

、わずか数週間の数を変更月曜日の代わりの日曜日を求めた質問は、私たちは余分をスキップし得るので

2017-08-21 00:00:00.000

DATEADD()以前から。

今そうのように一緒にそれをすべて置く:

WHERE hire_date between 
      DATEADD(week, DATEDIFF(week, 0, GETDATE()) -6, 0) 
     AND 
      DATEADD(DAY, -1, DATEADD(week, DATEDIFF(week, 0, GETDATE()) -1, 0)) 
0

あなたは私はあなたが最新の週の最後の日に早い週の最初の日が必要だと思う言っているから。これを実現するには、これを行うことができます:

WHERE hire_date between DATEADD(week, -6, DATEADD(WEEK, DATEDIFF(wk,0,GETDATE()), 0)) 
and DATEADD(week, -2, DATEADD(WEEK, DATEDIFF(wk,5,GETDATE()), 6)) 
+1

各条件で 'DATEADD()'呼び出しの1つを削除することができますが、インクリメントの一部として '-6'と' -2'を入れるだけです。 –

関連する問題