SQL Server har sin egen opfattelse af ugenumre som ganske rigtigt ikke passer os ret godt. I Books Online under CREATE FUNCTION (
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_create_7r1l.asp) er der et eksempel på en funktion der beregner korrekt ugenummer.
Jeg har lige prøvet det af og resultatet ser fornuftigt ud:
-----
DECLARE @dato datetime
DECLARE @res TABLE(dato datetime, ugedag int, fra_datepart int, fra_isoweek int)
SET DATEFIRST 1
SET @dato = '20041227'
WHILE @dato < '20050107'
BEGIN
INSERT INTO @res VALUES(@dato, DATEPART(dw, @dato), DATEPART(week, @dato), dbo.ISOweek(@dato))
SET @dato = DATEADD(d, 1, @dato)
END
SELECT * FROM @res
-----
Resultat:
dato ugedag fra_datepart fra_isoweek
---------------------------- ----------- ------------ -----------
2004-12-27 00:00:00.000 1 53 53
2004-12-28 00:00:00.000 2 53 53
2004-12-29 00:00:00.000 3 53 53
2004-12-30 00:00:00.000 4 53 53
2004-12-31 00:00:00.000 5 53 53
2005-01-01 00:00:00.000 6 1 53
2005-01-02 00:00:00.000 7 1 53
2005-01-03 00:00:00.000 1 2 1
2005-01-04 00:00:00.000 2 2 1
2005-01-05 00:00:00.000 3 2 1
2005-01-06 00:00:00.000 4 2 1