Laden...

DATEADD mit variablem Interval

Erstellt von Grumbler85 vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.031 Views
G
Grumbler85 Themenstarter:in
538 Beiträge seit 2008
vor 14 Jahren
DATEADD mit variablem Interval

verwendetes Datenbanksystem: SQL EE 2008

Hallo Leute,

ich würde gerne wissen, ob es möglich ist den Datepart aus DATEADD variabel zu füllen, also im Endeffekt bräuchte ich einen Convert von VARCHAR auf Interval, aber ich habe leider nichts dazu gefunden, was das erledigt

So zum Beispiel stelle ich mir das vor:


DATEADD(@Einheit, @Anzahl, GETDATE())

Vielen Dank im Vorraus

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

1.564 Beiträge seit 2007
vor 14 Jahren

Hallo Grumbler85

Nein, das geht so nicht (geht zwar über dynamisches SQL - ist aber Schrott).

Warum verwendest du nicht einfach DAY, HOUR oder MINUTE als Basis und rechnest einfach um?

Grüße
Flo

Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.

G
Grumbler85 Themenstarter:in
538 Beiträge seit 2008
vor 14 Jahren

Nun das Problem dabei ist schlicht und ergreifend folgendes:

Wieviel Tage hat ein Jahr?
Wieviel Tage hat ein Monat?

Denn wenn ich immer 30 drauf rechne, verschiebt sich nach 12 Monaten das Datum bereits um ca. 1 Woche (dank Februar noch mehr)

Aber gut ich mach einfach sowas wie ein Switch und lager die Funktion aus...

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

1.564 Beiträge seit 2007
vor 14 Jahren

Ich weiß zwar nicht genau wo ich sowas generisches in SQL brauchen könnte aber okay. 😉

Schreib dir halt eine skalare Funktion aller:

CREATE FUNCTION AddDate(@type VARCHAR(20), @interval INT, @date SMALLDATETIME)
   RETURNS DATETIME
AS
BEGIN
   RETURN CASE 
      WHEN @type = 'HOUR' THEN DATEADD(HOUR, @interval, @date)
      WHEN @type = 'DAY' THEN DATEADD(DAY, @interval, @date)
      WHEN @type = 'MONTH' THEN DATEADD(MONTH, @interval, @date)
      WHEN @type = 'YEAR' THEN DATEADD(YEAR, @interval, @date)
      END
END

Diese sollte aber niemals innerhalb einer WHERE Klausel auf Spalten angewendet werden. Sonst hebelst du alle Indizes aus.

Grüße
Flo

Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.