SQL AS/400 DB2 Tage zum Datum hinzurechnen

Mr.Church

Lieutenant
Registriert
Mai 2007
Beiträge
645
Hallo,

ich sitze gerade an einer IBM DB2 Datenbank, welche auf einer AS/400 läuft.
Beim Durchsehen bin ich auf Fehler gestossen, die ich nun beheben wollte. Allen voran geht es mir um das Berechnen eines Datums. Allerdings stoße ich hier auf ein Probleme.

In einem Datumsfeld (als Datumsfeld mit 10 Stellen definiert) soll vom aktuellen Datum X Tage hinzugerechnet werden. Diese X Tage ergeben sich aus einem Feld in der gleichen Tabelle.

SQL:
current_date + (XYZ_Feld_Wert) DAYS
funktioniert nicht.

SQL:
current_date + 3 DAYS
funktioniert hingegen wunderbar.

Habe ich irgendwo einen Denkfehler bzw. etwas übersehen, oder wieso wird der Zahlenwert aus dem XYZ_Feld nicht eingesetzt?
Der Wert liegt derzeit als Konstante dort vor.


VG
 
Zuletzt bearbeitet:
Hallo,

ADD_DAYS() funktioniert leider nicht. Das hatte ich schon versucht. DB2 mag die MySQL und Oracle SQL Befehle nicht so gerne ;)

Merkwürdigerweise funktioniert nur "current_date + 3 days" - also die Anzahl der hinzurechnenden Tage als absoluter Wert - fehlerfrei.
Problem ist aber, das der Wert in einem Feld steht und der Wert kann sich ändern. Daher möchte ich ja "current_date + (FELDNAME) days" rechnen lassen.
 
elnino460 schrieb:
Welcher Typ ist denn das Feld mit den zu addierenden Zahlen?
Das Feld mit dem Datum ist ein Datumsfeld (L, 10) und das Feld mit dem Wert, der als Anzahl der Tage eingesetzt werden soll, ist ein Zahlenfeld mit 2 Stellen (ohne Nachkomma).
 
Mr.Church schrieb:
[...] das Feld mit dem Wert, der als Anzahl der Tage eingesetzt werden soll, ist ein Zahlenfeld mit 2 Stellen (ohne Nachkomma).
U.U. verlangt der Syntax explizit nach einem Integer und du musst dein Werte-Feld entsprechend casten:
SQL:
current_date + cast(XYZ_Feld_Wert as Integer) DAYS

Ich kenne DB2 nicht im Detail, aber bei Informix gibt es manchmal genau sowas, wo du dir denkst, dass der das doch eigentlich trivial selbst, automatisiert casten könnte.
 
  • Gefällt mir
Reaktionen: elnino460
Auch ohne Erfahrung, aber nach kurzer Suche würde ich folgendes probieren:

SQL:
DATE(current_date + XYZ_Feld_Wert DAYS)
 
@AW4 und @Superior1337 Danke! Ich werde es ausprobieren und hier wieder Rückmeldung geben. Wäre natürlich der Knaller, wenn das daran gelegen hätte. Zumal ich stundenlang in der DB2 Doku und im Netz gesucht habe.
Ergänzung ()

Kurze Rückmeldung: Beide Varianten funktionieren nicht.
Aber die Fehlermeldung beschreibt, dass das Feld nicht gefunden wurde. Schreibfehler habe ich ausgeschlossen.
Offenbar wird das Ganze in einem Kontext ausgeführt, wo das Feld unbekannt ist, obwohl wir uns in der gleichen Tabelle befinden.
Dann gehe ich mal auf die Suche ...
 
Zuletzt bearbeitet:
Sooo.. um dann hier abschliessend Licht ins Dunkle zu bringen:
SQL:
current_date + (FELD_NAME) DAYS
war richtig.
Allerdings habe ich mich auf einer Ebene "über" der Datenbank bewegt. Dort werden berechnete Felder erst dann "Wirklichkeit", wenn die Berechnung ausgeführt wird. Daher waren die Felder für meine SQL Abfragen nicht vorhanden.
Jetzt, wo ich die Felder zuerst in der DB angelegt habe und dann auf der darüberliegende Ebene mein SQL gestartet habe, klappt es.
 
  • Gefällt mir
Reaktionen: Superior1337
Zurück
Oben