PDA

View Full Version : Datenübertragung von System i:Filtern von Daten



Seiten : [1] 2

PFR
03-06-14, 15:14
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.

Joe
03-06-14, 15:59
where T1.POMAND = 1 AND T1.PDATE1 >= 20140603

Fuerchau
03-06-14, 16:43
t1.pdate1 >= year(current date) * 10000 + month(current date) * 100 + day(current date)

B.Hauser
04-06-14, 06:26
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

PFR
04-06-14, 06:59
Guten Morgen Fuerchau,

dein Lösungsvorschlag klappt prima, vielen Danke!

Gruß
PFR

PFR
04-06-14, 07:09
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

BenderD
04-06-14, 07:25
... 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

B.Hauser
04-06-14, 23:24
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

BenderD
05-06-14, 05:51
... 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

PFR
05-06-14, 07:16
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