-
Dezimaldatenfehler im SQL
Hallo iSeries-Gemeinde,
ich kämpfe mit /36-Daten. In einem 2-stelligen gezonten Feld sind in manchen Sätzen Blanks. Die Datei wird mit COBOL-Pgm gepflegt, an die ich nicht ran komme. Nun muss ich aber mit SQL die Datei einlesen. --> "Auswahlfehler in Feld-xy".
QRY hat da eine Einstellmöglichkeit Dezimalfehler zu ignorieren. Gibts sowas auch bei SQL? Mit Funktionen wie translate, digits, substr, hex und Kombinationen daraus klappt es nicht. Hab ich Sätze mit Blanks im Griff, klappt es wieder nicht bei den "normalen" Sätzen.
Eure Hilfe wär echt super!
Gruß Armin
-
Dies kannst du nur per embedded SQL lösen, also mit einem Programm.
Für Variablen kannst du einen Anzeiger definieren, so dass Datenfehler vom Programm erkannt werden können:
d Anz1 5I 0
d Anz2 5I 0
fetch mycursor into :Feld1 :Anz1, :Feld2 :Anz2, ...
Anzx = -1 => Null-Flag
Anzx = -2 => Datenfehler
In diesem Fall wird der Satz gelesen und kein Fehler gemeldet.
-
Na wenn das keine prompte Antwort ist!
Funktioniert das auch in der where Klausel?
Es handelt sich um die Lieferwoche. Ich möchte 2 gezonte Felder Lieferjahr und Woche mit concat zusammensetzen und dann diesen Bereich mit between selektieren.
Übrigens gibt es auch eine Routine für die Ermittlung der KW aus einem Datum?
Danke
Armin
-
 Zitat von Armin
Übrigens gibt es auch eine Routine für die Ermittlung der KW aus einem Datum?
Danke
Armin
das sollt mit week_iso(Datum) gehen
PHP-Code:
d Woche s 3u 0
...
c/EXEC SQL
c+ set :Woche = week_iso(:Datum)
C/END-EXEC
Gruß Ronald
-
Danke für die Info.
Aber ich brauch die Funktion im RPG!?
-
Für die where-Klausel geht das leider nicht, hier müssen die Daten schon korrekt sein sonst will SQL nicht.
Ggf. musst du halt ein Korrekturprogramm (COBOL/RPG) laufen lassen, dass alle falschen Daten eben berichtigt.
week_iso kannst du doch in RPG (siehe obiges Beispiel) direkt aufrufen.
Allerdings ist hier Vorsicht anzuwenden. Die Funktion liefert nur eine Zahl zwischen 1 und 53, leider nicht welches Jahr !!!
Wenn z.B. die Woche 53 gemeldet wird, kann das die 53. Woche des Vorjahres oder des aktuellen Jahres sein.
Es muss also zusätzlich geprüft werden, ob z.B. MONTH(Datum) = 12 ist.
Also:
if week_iso(datum) = 53
if month(datum)=12 then
myyear = year(datum) - 1
else
myyear = year(datum)
endif
eindif
das gleiche gilt bei Woche 1:
if week_iso(datum) = 1
if month(datum)=12 then
myyear = year(datum) + 1
else
myyear = year(datum)
endif
eindif
Schade, dass es keine korrekte Funktion gibt, die mir Jahr + Woche zusammenhängend gibt.
-
PHP-Code:
d Datum s d datfmt(*eur)
d Woche s 3u 0
d WoTag s 3u 0
d Jahr s 4s 0
d
d parm_Dat s 8a
d parm_WoTag s 10a
d parm_DayOf s 1a
d parm_Woche s 2a
d parm_Jahr s 4
d
d Datum_num s 8 0
d
d ds
d $woche 10a
d dim(7)
d 1 10a inz('Montag ')
d 11 20a inz('Dienstag ')
d 21 30a inz('Mittwoch ')
d 31 40a inz('Donnerstag')
d 41 50a inz('Freitag ')
d 51 60a inz('Samstag ')
d 61 70a inz('Sonntag ')
c *entry plist
c parm parm_Dat
c parm parm_WoTag
c parm parm_DayOf
c parm parm_Woche
c parm parm_Jahr
c
c move parm_Dat datum_num
c move datum_num datum
c
c/EXEC SQL
c+ set :Woche = week_iso(:Datum)
C/END-EXEC
c/EXEC SQL
c+ set :WoTag = DayOfWeek_iso(:Datum)
C/END-EXEC
c
c*
c Select
c When woche = 1
c and
c %SubDt(Datum: *M) = 12
c eval Jahr = %SubDt(Datum: *Y) + 1
c When woche >= 52
c and
c %SubDt(Datum: *M) = 1
c eval Jahr = %SubDt(Datum: *Y) - 1
c Other
c eval Jahr = %SubDt(Datum: *Y)
c EndSl
c*
c eval parm_WoTag = $Woche(Wotag)
c move wotag parm_DayOf
c move woche parm_woche
c move Jahr parm_Jahr
c*
c return
Urheber an der Quelle müsste die Birgitta gewesen sein (man sollte mich korrigieren wenn es nicht so ist)
Gruß Ronald
-
Also größten Dank - Ihr seid unglaublich.
So schnell und kompetent wünscht man sich manche Hotline.
Wie´s aussieht könnte mein PGM funktionieren.
Allen ein schönes Wochenende.
Armin
Similar Threads
-
By christian_lettner in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 16-11-06, 10:15
-
By FNeurieser in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 11-10-06, 14:53
-
By malzusrex in forum IBM i Hauptforum
Antworten: 8
Letzter Beitrag: 19-09-06, 11:04
-
By Kaufmann in forum IBM i Hauptforum
Antworten: 11
Letzter Beitrag: 28-06-06, 14:11
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-06-06, 09:43
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks