È possibile eseguire questa operazione in SQL 2008 in modo molto semplice poiché ora supporta isoww come primo argomento datapart. Tuttavia, questo non era in SQL 2000 (o 2005). C'è una funzione nell'articolo this che lo farà per te in SQL 2000/2005.
Nel caso in cui il blog sia offline, ecco la funzione. Vai al post per saperne di più sulle settimane ISO e non 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 per aver menzionato il mio post sul blog :-) – SQLMenace
Un buon post sul blog, in effetti. :-) Quindi non c'è altro modo di ottenere il numero della settimana ISO in SQL Server 2000, tranne che usando una UDF? – MicSim
@MicSim, sfortunatamente no. C'è un argomento per dire non farlo in SQL Server, ma restituire i dati così come sono e lasciare che il codice chiamante funzioni determinare il numero della settimana. Ma ciò dipende in realtà da requisiti esatti quindi potrebbe valere la pena o meno. – AdaTheDev