# Kalenderwochenberechnung in MS-SQL 2000



## StefanLausL (7. November 2006)

Hallo !

Ich habe ein Skript das die Anzahl der offenen Aufträge nach Kalenderwoche berechnen soll.
Nun da bald Jahreswechsel ist läuft das Skript auf Fehler:

Da die Kalenderwochenberechnung ja nicht mit 
print DATEPART( wk,'07.11.06' ) funktioniert habe ich es mir im Skript
einfach gemacht und print DATEPART( wk,'07.11.06' ) -1 
ausgelesen.
Nun wie gesagt das funktioniert nur bis 31.12.06 danach würde als Ergebnis auch mal
die Kalanderwoche 0 ausgegeben werden.
Nun habe ich die Funktion SET DATEFIRST gefunden.
Allerdings weiss ich nichts mit der anzufangen.
Manchmal stimmt die Kalaenderwochenberechnung und manchmal nicht.
Wie muss ich mit der Funktion umgehen, bzw. ich habe auch gelesen das man auch eine Funktion schreiben kann die die KW nach Din Norm berechnet.
Allerdings weiss ich nicht wie ich eine Funktion in MS-SQL schreibe, bzw. diese dann im Skript aufrufen kann.

Für eine Hilfe wäre ich sehr dankbar !


----------



## StefanLausL (7. November 2006)

So ich hab nun eine Funktion die das korrekt berechnen soll:




ALTER  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 

Wie kann ich diese Funktion in einem SELECT Statement aufrufen ?


----------



## StefanLausL (7. November 2006)

Hat sich erledigt !



print  maja.dbo.ISOWeek(getdate() )


----------

