Puede hacerlo fácilmente en SQL 2008, ya que ahora admite isoww como primer argumento de fecha y parte. Sin embargo, esto no estaba en SQL 2000 (o 2005). Hay una función en el artículo this que lo hará por usted en SQL 2000/2005.
En caso de que el blog se desconecte, esta es la función. Vaya a la publicación para obtener más información sobre las semanas ISO y las no 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
+1 por mencionar mi publicación en el blog :-) – SQLMenace
Buena publicación en el blog, de hecho. :-) Entonces, ¿no hay otra manera de obtener el número de semana ISO en SQL Server 2000, excepto mediante el uso de un UDF? – MicSim
@MicSim, desafortunadamente no. Hay un argumento para decir que no lo haga en SQL Server, pero devuelva los datos como están y deje que su código de llamada funcione determine el número de la semana. Pero eso realmente depende de los requisitos exactos, por lo que puede o no vale la pena considerarlo. – AdaTheDev