Uvědomte si, že existují rozdíly v tom, co je považováno za správné číslo týdne, v závislosti na kultuře. Čísla za týdny závisí na několika předpokladech, které se v jednotlivých zemích liší, viz článek na Wikipedii na toto téma. Existuje norma ISO (ISO 8601), která se vztahuje na čísla týdnů.
SQL server integroval DATEPART()
funkce nemusí nutně dělat správnou věc. SQL Server předpokládá, že den 1 týdne 1 bude 1. leden, pro mnoho aplikací je to špatně.
Správný výpočet čísel týdnů není triviální a na webu lze nalézt různé implementace. Například existuje UDF, který vypočítává čísla týdnů ISO z let 1930-2030, je jedním z mnoha dalších. Budete muset zkontrolovat, co vám vyhovuje.
Tato je z Books Online (ačkoli pravděpodobně budete chtít použít odpověď z odpovědi Jonase Lincolna, verze BOL se zdá být nesprávná):
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