0

DateFirstを7に設定しました。次のSQLを実行すると、第1週が返されます。

SET DateFirst 7
SELECT DATEPART(wk, '1/1/2011') as WeekNumber

開始日が7に設定されている場合、なぜこれが第1週に戻るのかわかりません。私によると、第1週は2011年1月2日、つまり日曜日に開始する必要があります。どうすればこれを修正できますか?

4

2 に答える 2

3

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
  )
)

このコードが行うことは、今年の現在の日と平日を使用して、その年の最初の日曜日であった日を計算し、現在の日付からその日を差し引いて、年が日曜日から始まった仮想日付を与えることです。次に、その日付の週番号を取得します。これは、定義によると週番号と等しくなければなりません。

于 2012-04-20T23:42:35.743 に答える
2

ISO週間もあります

第 01 週については、相互に同等の定義があります。

  • その年の最初の木曜日を含む週、
  • 1月4日を含む週、
  • 開始年の過半数 (4 日以上) の日を持つ最初の週、および
  • 12 月 29 日から 1 月 4 日までの期間の月曜日から始まる週。

1 月 1 日が月曜、火曜、水曜、木曜の場合は 01 週目です。1 月 1 日が金曜、土曜、日曜の場合は、前年の 52 週目または 53 週目です。

http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/iso-week-in-sql-server

于 2012-04-20T23:45:31.567 に答える