2016-03-30 23 views
2

現在の日付の曜日(月曜日)を取得するこのクエリがあります。それは、日付が月と日曜日の最初のときに壊れます。この問題を解決する方法がわからないどんな助けも高く評価されます。ありがとう。今週の開始日(月曜日) - クエリで間違った日付が返される

DATEADD(wk,DATEDIFF(wk,0,'2017-01-01'),0) 
+0

動作するかどうか、私に教えてください: 'DATEFIRST 1セットを DATEADD(DD、(1-DATEPART(DW、 '2017年1月1日を'))を選択し、「2017から01 -01 ') '(SET DATEFIRST 1は、デフォルトでDBAによって残されたアメリカの日付のスタイルを修正するために必要です) – cha

+0

SET DATEFIRST 1を試しましたが、この問題は引き続き発生します。 – radical

答えて

1

これは、日付0から提供日までの週数。 0は実際には月曜日の '1900-01-01'です。したがって、DATEDIFFは、この日付から供給されたデータまでの完了した週の数を検出します。それは、2016年3月27日のDATEDIFFが6065(1週間の終わり)を返し、2016年3月26日が6064を返す理由です(まだ1週間の終わりではありません)。 これは既にこのリンクで説明されています - Get first day of the week

+0

ありがとうございます。そのリンクは役に立ちました。 – radical

1

下記のコードを試してみてください。それはあなたが探しているものですか?これは私が私のクエリでこれを使用

declare @date date = '2017-01-01' 
select case when dateadd(dd,-datepart(dw,@date)+2,@date) < dateadd(dd,-day(@date)+1,@date) 
         then @date else dateadd(dd,-datepart(dw,@date)+2,@date) end as firstdayoftheweek 
+0

役に立つとわかったら回答を受け入れるのを忘れないでください – sam

+0

それは私に2017/01/02を与えています。その日の週の開始日は2017/12/26でなければなりません。 – radical

関連する問題