DateFirstを7に設定しました。次のSQLを実行すると、第1週が返されます。
SET DateFirst 7
SELECT DATEPART(wk, '1/1/2011') as WeekNumber
開始日が7に設定されている場合、なぜこれが第1週に戻るのかわかりません。私によると、第1週は2011年1月2日、つまり日曜日に開始する必要があります。どうすればこれを修正できますか?
DateFirstを7に設定しました。次のSQLを実行すると、第1週が返されます。
SET DateFirst 7
SELECT DATEPART(wk, '1/1/2011') as WeekNumber
開始日が7に設定されている場合、なぜこれが第1週に戻るのかわかりません。私によると、第1週は2011年1月2日、つまり日曜日に開始する必要があります。どうすればこれを修正できますか?
http://msdn.microsoft.com/en-us/library/ms174420%28v=sql.90%29.aspxから
週 (wk, ww) の日付部分には、SET DATEFIRST に加えられた変更が反映されます。任意の年の 1 月 1 日は、週の日付部分の開始番号を定義します。たとえば、DATEPART(wk, 'Jan 1, xxxx') = 1、ここで xxxx は任意の年です。
だから:そのように定義されているからです。
編集: SQL-SERVER 内でこれを修正できます。次のようなものを使用します。
DATEPART(wk,
DATEADD(day,
-( (DATEPART(day, date) + 8 - DATEPART(weekday, date)) % 7 - 1),
date
)
)
このコードが行うことは、今年の現在の日と平日を使用して、その年の最初の日曜日であった日を計算し、現在の日付からその日を差し引いて、年が日曜日から始まった仮想日付を与えることです。次に、その日付の週番号を取得します。これは、定義によると週番号と等しくなければなりません。
ISO週間もあります
第 01 週については、相互に同等の定義があります。
1 月 1 日が月曜、火曜、水曜、木曜の場合は 01 週目です。1 月 1 日が金曜、土曜、日曜の場合は、前年の 52 週目または 53 週目です。
http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/iso-week-in-sql-server