Vær opmærksom på, at der er forskel på, hvad der anses for det korrekte ugenummer, afhængigt af kulturen. Ugetal afhænger af et par antagelser, der er forskellige fra land til land, se Wikipedia-artikel om sagen. Der er en ISO-standard (ISO 8601), der gælder for ugenumre.
SQL-serveren integrerede DATEPART()
funktion gør ikke nødvendigvis det rigtige. SQL Server antager, at dag 1 i uge 1 vil være den 1. januar, for mange applikationer er det forkert.
At beregne ugenumre korrekt er ikke-trivielt, og forskellige implementeringer kan findes på nettet. For eksempel er der en UDF, der beregner ISO-ugenumrene fra 1930-2030, som er en blandt mange andre. Du bliver nødt til at tjekke, hvad der virker for dig.
Denne er fra Books Online (selvom du sikkert vil bruge den fra Jonas Lincolns svar, ser BOL-versionen ud til at være forkert):
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