ich habe aktuell folgendes Newbie Problem:
ich bastle mir aktuell mit dem Tool von IBM ein Datenübertragung von der AS400 ins Excel.
Dabei möchte ich ein Datenfeld (PDATE1) bei der Übertragung filtern, in dem Datenfeld stecken Daten im folgendem Format YYYYMMTT.
Der Filter soll mir nachher nur noch Daten anzeigen, ab dem aktuellen Tag und zukünftige.
Ab 7.2 wird es dann einfacher, d.h. ein Datum kann direkt mit einder der Built-In-Funktionen DEC, INT oder BIGINT in ein numerisches Datum im Format YYYYMMDD übersetzt werden:
T1.PDate1 = Int(Current_Date);
Da das numerische Tagesdatum vermutlich häufiger gebraucht wird, wäre es zu empfehlen eine User Defined Function zu schreiben und diese zu verwenden. Oder das Ganze in einer View zu hinterlegen.
Code:
CREATE FUNCTION YourSchema/NUMCURDATE()
RETURNS DECIMAL (8, 0)
LANGUAGE SQL
Return Dec(VarChar_Format(Current_Timestamp, 'YYYYMMDD'));
Diese Funktion kann dann wie folgt verwendet werden:
danke für den Hinweis mit den SQL Funktionen, klingt gut der Ansatz, nur leider weiß ich nicht wie ich diese im AS400 System hinterlege.
Wir haben aktuell die Version V6R1 im Einsatz.
Gibt es da auch die Möglichkeit ein SQL Funktion, wie du sie beschrieben hast zu hinterlegen, wenn ja, wie und bevorzugt mit welchem grafischem Tool einzurichten (i Navigator, Drittanbieter Tool?).
SQL Funktionen würden mir hier bestimmt das Leben erleichtern bei den arbeiten mit den DTF-Files verwenden kann.
Zitat von B.Hauser
Vor Release 7.2 benötigst Du ein relativ komplexes Konstrukt. Entweder so wie es Baldur angegeben hat oder z.B. auch So:
Ab 7.2 wird es dann einfacher, d.h. ein Datum kann direkt mit einder der Built-In-Funktionen DEC, INT oder BIGINT in ein numerisches Datum im Format YYYYMMDD übersetzt werden:
T1.PDate1 = Int(Current_Date);
Da das numerische Tagesdatum vermutlich häufiger gebraucht wird, wäre es zu empfehlen eine User Defined Function zu schreiben und diese zu verwenden. Oder das Ganze in einer View zu hinterlegen.
Code:
CREATE FUNCTION YourSchema/NUMCURDATE()
RETURNS DECIMAL (8, 0)
LANGUAGE SQL
Return Dec(VarChar_Format(Current_Timestamp, 'YYYYMMDD'));
Diese Funktion kann dann wie folgt verwendet werden:
... noch zwei einfache Alternativen:
- eine View anlegen, die das alles innerhalb der Datenbank macht
- eine Tabelle mit einem Satz anlegen, in dem das Vergleichsdatum im gewünschten Format drinsteht und diese über JOBSCDE einmal nächtens aktualisieren. Die kann man dann überall zujoinen, wo man das braucht.
der Souce Code, den ich angegeben habe kannst Du direkt im IBM i Navigator (Eine Prozedur ausführen) eingeben und ausführen. Das ist eine einmalige Sache, d.h. es wird ein permanentes Objekt, eine Funktion erstellt. Diese Funktion siehst Du natürlich auch im IBM i Navigator unter Deiner Bibliothek.
Über den IBM i Navigator kannst Du natürlich auch direkt die Funktion erfassen, d.h. unter Deiner Bibliothek/Schema auf Funktionen positionieren, Rechtsklick, Neu, SQL-Funktion.
... wobei die angegebene Quelle Full Tabe scan verdächtig ist - ohne Angabe der entsprechenden Option ist die non deterministic, wird also für jeden Vergleich auf Satzebene aufgerufen. Da geht auf einen ratsch mehr Zeit vertrödelt als bei allen CLOSSQLCSR und select Feldliste eingesparten Nano- und Microsekunden...
leider wirft er mir eine Fehlermeldung zurück (siehe Screenhot)
hat jemand eine Idee was hier nicht klappt?
Zitat von B.Hauser
Hallo PFR,
der Souce Code, den ich angegeben habe kannst Du direkt im IBM i Navigator (Eine Prozedur ausführen) eingeben und ausführen. Das ist eine einmalige Sache, d.h. es wird ein permanentes Objekt, eine Funktion erstellt. Diese Funktion siehst Du natürlich auch im IBM i Navigator unter Deiner Bibliothek.
Über den IBM i Navigator kannst Du natürlich auch direkt die Funktion erfassen, d.h. unter Deiner Bibliothek/Schema auf Funktionen positionieren, Rechtsklick, Neu, SQL-Funktion.
STRSQL unterstützt dies nicht da nur 1 Befehl akzeptiert wird.
Du kannst die Funktion (wie oben beschrieben) im Opsnav erstellen oder in einer normalen SRC erfassen und dann per RUNSQLSTM erzeugen.
Letzteres hat den Vorteil, dass du die Quelle permanent sicherst.
Bookmarks