View Full Version : Datenübertragung von System i:Filtern von Daten
Hallo zusammen,
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.
Bitte um Hilfe.
where T1.POMAND = 1 AND T1.PDATE1 >= 20140603
t1.pdate1 >= year(current date) * 10000 + month(current date) * 100 + day(current date)
Vor Release 7.2 benötigst Du ein relativ komplexes Konstrukt. Entweder so wie es Baldur angegeben hat oder z.B. auch So:
T1.PDate1 = Dec(VarChar_Format(Current_Timestamp, 'YYYYMMDD'), 8, 0)
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.
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:
Where P1Date = NumCurDate();
Birgitta
Guten Morgen Fuerchau,
dein Lösungsvorschlag klappt prima, vielen Danke!
Gruß
PFR
Guten Morgen Birgitta,
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.
Vor Release 7.2 benötigst Du ein relativ komplexes Konstrukt. Entweder so wie es Baldur angegeben hat oder z.B. auch So:
T1.PDate1 = Dec(VarChar_Format(Current_Timestamp, 'YYYYMMDD'), 8, 0)
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.
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:
Where P1Date = NumCurDate();
Birgitta
... 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.
D*B
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.
Birgitta
... 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...
D*B
Guten Morgen Birgitta,
leider wirft er mir eine Fehlermeldung zurück (siehe Screenhot)
hat jemand eine Idee was hier nicht klappt?
264
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.
Birgitta