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)
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ß.
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)
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ß.