これは、週の最初の日が日曜日であると仮定して、週番号と年を指定して、週の最初の曜日を返します。
標準的な除外が適用されます。たとえば、1499 年は試さないでください。
declare @tbl table ([Week] int, [Year] int)
insert @tbl select 38,2012
union all select 1,2012
union all select 0,2012
union all select 1,2013
select DATEADD(
Week,
[Week]-1,
DATEADD(
Day,
(8-@@datefirst)-DATEPART(dw, CAST([Year]*10000+101 AS VARCHAR(8))),
CAST([Year]*10000+101 AS VARCHAR(8))))
from @TBL
結果
2012-09-16 00:00:00.000
2012-01-01 00:00:00.000
2011-12-25 00:00:00.000
2012-12-30 00:00:00.000
週番号は 1 から始まることに注意してください。週が日曜日に始まらない場合、その週の最初の日は前の年になる可能性があります (行 #4)。週は相対的であるため、週 0、-1 などを使用することができ、正しいか間違っているかにかかわらず、結果 (行 #3) が得られます。
また、代替手段として、別の方法を使用して年から日付を作成したことにお気付きかもしれません。
クエリの
(8-@@datefirst)
一部により、
DATEFIRST
設定に関係なく堅牢になります。