Bunu, SQL 2008 içinde, artık ilk datepart argümanı olarak isoww desteklediğinden yapabilirsiniz. Ancak, bu SQL 2000'de (veya 2005) değildi. SQL 2000/2005'te sizin için yapacak olan this makalesinde bir işlev vardır.
Blog çevrimdışı duruma geçerse, işte işte budur. ISO ve ISO dışı haftalar hakkında daha fazla bilgi edinmek için yayına gidin. burada gösterildiği gibi
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 Blog gönderilerimden bahsetmek için +1 – SQLMenace
İyi blog yazısı, gerçekten. :-) Yani bir UDF kullanarak dışında, SQL Server 2000'de ISO hafta sayısını almanın başka bir yolu yok mu? – MicSim
@MicSim, maalesef değil. Bunu SQL Server'da yapmamanız için bir argüman var, ancak verileri olduğu gibi döndür ve çağrı kodunuzun hafta sayısını belirlemesine izin verin. Ama bu gerçekten tam gereksinimlere bağlıdır, bu yüzden düşünmeye değer olabilir veya olmayabilir. – AdaTheDev