Construye la fecha del año y el número de semana en MSSQL

Si tengo un YEAR y un número de WEEK , ¿cuál es una forma limpia de construir una DATE partir de esto? Prefiero que el día de la semana sea un lunes.

Use DATEADD

Rextester Demo

 DECLARE @y INT = 2015, @w INT = 37; SELECT [StartOfWeek] = DATEADD(wk,DATEDIFF(wk,7,CAST(@y AS NVARCHAR(100))) + (@w-1),7); 

Atención Lea los comentarios sobre DATEFIRST . Esto depende de tu cultura …

De acuerdo con mi comentario a tu pregunta, esta es una forma de presentar una tabla de números de ejecución que comienza en 1900-01-01 hasta algún momento del año 2173.

 CREATE TABLE dbo.RunningNumbers(Number INT NOT NULL ,CalendarDate DATE NOT NULL ,CalendarYear INT NOT NULL ,CalendarMonth INT NOT NULL ,CalendarDay INT NOT NULL ,CalendarWeek INT NOT NULL ,CalendarYearDay INT NOT NULL ,CalendarWeekDay INT NOT NULL); DECLARE @CountEntries INT = 100000; DECLARE @StartNumber INT = 0; WITH E1(N) AS(SELECT 1 FROM(VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))t(N)), --10 ^ 1 E2(N) AS(SELECT 1 FROM E1 a CROSS JOIN E1 b), -- 10 ^ 2 = 100 rows E4(N) AS(SELECT 1 FROM E2 a CROSS JOIN E2 b), -- 10 ^ 4 = 10,000 rows E8(N) AS(SELECT 1 FROM E4 a CROSS JOIN E4 b), -- 10 ^ 8 = 10,000,000 rows CteTally AS ( SELECT TOP(ISNULL(@CountEntries,1000000)) ROW_NUMBER() OVER(ORDER BY(SELECT NULL)) -1 + ISNULL(@StartNumber,0) As Nmbr FROM E8 ) INSERT INTO dbo.RunningNumbers SELECT CteTally.Nmbr,CalendarDate.d,CalendarExt.* FROM CteTally CROSS APPLY ( SELECT DATEADD(DAY,CteTally.Nmbr,{ts'1900-01-01 00:00:00'}) ) AS CalendarDate(d) CROSS APPLY ( SELECT YEAR(CalendarDate.d) AS CalendarYear ,MONTH(CalendarDate.d) AS CalendarMonth ,DAY(CalendarDate.d) AS CalendarDay ,DATEPART(WEEK,CalendarDate.d) AS CalendarWeek ,DATEPART(DAYOFYEAR,CalendarDate.d) AS CalendarYearDay ,DATEPART(WEEKDAY,CalendarDate.d) AS CalendarWeekDay ) AS CalendarExt; 

Esto te traerá el lunes actual:

 SELECT * FROM dbo.RunningNumbers WHERE CalendarYear = 2015 AND CalendarWeek = 37 AND CalendarWeekDay=1 

Sugerencia: ¡uno debe colocar índices!