Вы можете сделать это в SQL 2008 очень легко, поскольку теперь он поддерживает isoww в качестве первого аргумента datepart. Однако этого не было в SQL 2000 (или 2005). В этой статье есть функция, которая сделает это за вас в SQL 2000/2005.
В случае, если блог переходит в автономный режим, вот функция. Перейдите к сообщению, чтобы узнать больше о неделях ISO и не-ISO.
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