UDF-Problem am SQL Server 2005/2008

01/04/2009 - 12:47 von Gerald Aichholzer | Report spam
Hallo NG,

ein Kollege von mir möchte eine UDF schreiben, die
die Kalenderwoche als Zahl in der Form JJJJKW zurück
liefert. Die Definition der KW ist laut DIN, Wochen-
beginn jedoch der Samstag:

SET DATEFIRST = 6

CREATE FUNCTION [dbo].[ISOweek] (@DATE datetime)
RETURNS int
AS
BEGIN
DECLARE @ISOweek int
DECLARE @ISOyear int
DECLARE @Zeit_ID int

SET @ISOweek = DATEPART(wk,@DATE)+1 -
DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104')
SET @ISOyear = DATEPART(yy,@Date) * 100

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

IF ((DATEPART(mm,@DATE)) AND
((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28))
SET @ISOweek=1

SET @ZEIT_ID = @ISOyear + @ISOweek
RETURN(@ZEIT_ID)

END


Sehr interessant ist das Ergebnis von folgendem SELECT:

SELECT dbo.Isoweek('20030101') ==> 400653

Wenn die UDF nur das Jahr oder nur die Woche retourniert,
stimmt das Ergebnis. Nur die Addition liefert im obigen
Fall ein "schràges" Ergebnis.

Das Problem scheint nur beim 1.-3. Jànner aufzutreten.
(SQL 2005 SP3 und SQL 2008)

Wo kann das Problem liegen?

vielen Dank und schöne Grüße,
Gerald
 

Lesen sie die antworten

#1 Gregor Stefka
01/04/2009 - 14:29 | Warnen spam
"Gerald Aichholzer" schrieb im Newsbeitrag
news:#
Hallo NG,

ein Kollege von mir möchte eine UDF schreiben, die
die Kalenderwoche als Zahl in der Form JJJJKW zurück
liefert. Die Definition der KW ist laut DIN, Wochen-
beginn jedoch der Samstag:

SET DATEFIRST = 6



Hallo Gerald,

wieso Samstag? Nach ISO 8601 beginnt jede Woche mit Montag:
http://en.wikipedia.org/wiki/ISO_week_date
http://en.wikipedia.org/wiki/ISO_8601
DIN sagt Samstag? Aber darum gehts hier ja nicht.

Im SQL Server 2008 gibt es für datepart "ISO_WEEK"
für die Woche. Das JAHR muss man leider selbst ermitteln. Für àltere SQL
Server muss man alles zu Fuss machen.
Hier eine Funktion die das nachrüstet:
http://groups.google.de/group/micro...ode=source


hth
Gregor Stefka

Ähnliche fragen