Имайте предвид, че има разлики в това, което се счита за правилен номер на седмицата, в зависимост от културата. Броят на седмиците зависи от няколко предположения, които се различават в различните страни, вижте статията в Уикипедия по въпроса. Има стандарт ISO (ISO 8601), който се прилага за номерата на седмиците.
SQL сървърът интегрира DATEPART()
функцията не прави непременно правилното нещо. SQL Server приема, че ден 1 от седмица 1 ще бъде 1 януари, за много приложения това е погрешно.
Правилното изчисляване на числата за седмици е нетривиално и в мрежата могат да бъдат намерени различни реализации. Например, има UDF, който изчислява числата на ISO седмици от 1930-2030 г., като е един от многото други. Ще трябва да проверите какво работи за вас.
Това е от Books Online (въпреки че вероятно искате да използвате този от отговора на Джонас Линкълн, версията BOL изглежда е неправилна):
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