Tänk på att det finns skillnader i vad som anses vara rätt veckonummer, beroende på kultur. Veckonummer beror på ett par antaganden som skiljer sig från land till land, se Wikipedia-artikel om saken. Det finns en ISO-standard (ISO 8601) som gäller för veckonummer.
SQL-servern integrerade DATEPART()
funktion gör inte nödvändigtvis det rätta. SQL Server antar att dag 1 i vecka 1 är 1 januari, för många applikationer är det fel.
Att beräkna veckonummer korrekt är inte trivialt, och olika implementeringar kan hittas på webben. Till exempel finns det en UDF som beräknar ISO-veckotalen från 1930-2030, vilket är en bland många andra. Du måste kontrollera vad som fungerar för dig.
Den här är från Books Online (även om du förmodligen vill använda den från Jonas Lincolns svar, BOL-versionen verkar vara felaktig):
CREATE FUNCTION ISOweek (@DATE DATETIME)
RETURNS INT
AS
BEGIN
DECLARE @ISOweek INT
SET @ISOweek = DATEPART(wk,@DATE)
+1
-DATEPART(wk,CAST(DATEPART(yy,@DATE) AS CHAR(4))+'0104')
-- Special cases: Jan 1-3 may belong to the previous year
IF (@ISOweek=0)
SET @ISOweek = dbo.ISOweek(CAST(DATEPART(yy,@DATE) - 1
AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1
-- Special case: Dec 29-31 may belong to the next year
IF ((DATEPART(mm,@DATE)=12) AND
((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28))
SET @ISOweek=1
RETURN(@ISOweek)
END
GO