Houd er rekening mee dat er verschillen zijn in wat als het juiste weeknummer wordt beschouwd, afhankelijk van de cultuur. Weeknummers zijn afhankelijk van een aantal aannames die van land tot land verschillen, zie Wikipedia-artikel hierover. Er is een ISO-norm (ISO 8601) die van toepassing is op weeknummers.
De SQL-server integreerde DATEPART()
functie niet noodzakelijk het juiste doet. SQL Server gaat ervan uit dat dag 1 van week 1 1 januari zou zijn, voor veel applicaties is dat fout.
Het correct berekenen van weeknummers is niet triviaal, en verschillende implementaties zijn te vinden op het web. Er is bijvoorbeeld een UDF die de ISO-weeknummers van 1930-2030 berekent, een van de vele andere. Je moet kijken wat voor jou werkt.
Deze is van Books Online (hoewel je waarschijnlijk die van Jonas Lincoln's antwoord wilt gebruiken, lijkt de BOL-versie onjuist te zijn):
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