Anmelden

View Full Version : was besseres als coalesce?



Seiten : 1 [2]

BenderD
06-05-22, 08:22
moin,

habe ein alpa Feld mit guten und bösen Daten.

gute Daten

123456
1234567
1234567--
1234567/


böse Daten
*Blank
HUGO
12DR77887777
...


ein
select coalesce(dec(trim(substr(FELD, 1, 7)), 7, 0), 0) from datei
zeigt (STRSQL) +++++++ bei den bösen Sätzen

Diese kann ich aber nicht selektieren

Wie komme ich an die Sätze die nicht so einfach sind, meine 'bösen' sind ja nur Bsp.!

Danke

... ich würde das beim laden der Daten direkt bereinigen.
Sprich: Trigger, der das Huddelfeld entsprechend in ein (zusätzliches) numerisches Feld umsetzt und in einer (zentralen) Protokolldatei warnings bzw. auch error Meldungen protokolliert.
Wenn das Problem nicht nur ein Feld betrifft, sondern da umfassend Fug und Unfug ankommt würde ich die ankommenden Daten in Bereinigte und Huddel aufsplitten und den Huddel Pool von Zeit zu Zeit aufarbeiten.

D*B

Fuerchau
06-05-22, 08:31
Lade die die SQL-Reference-PDF von V7R4 runter, da ist alles ganz gut erklärt.
Um RegEx zu testen probiere ich immer gerne folgende Seite aus:
https://regex101.com/
Und was da dann funktioniert, passt meist auch für SQL und .Net.

Der Regexp_like sollte immer funktionieren, der regexp_count ggf. nicht.
Aber auch im Falle von NULL kann man wieder coalesce verwenden:

coalesce(regexp_like(), 1<>1)
coalesce(regexp_count(), 0)

Andreas_Prouza
06-05-22, 08:43
regexp_count('', '[^0-9]|^$')
^=Anfang des Strings
$=Ende des Trings
Also wenn es Zeichen gibt, die keine Zahlen sind ODER nur Anfang/Ende (ohne Zeichen) gibt.

Du kannst dir auf Wikipedia die Regex Syntax anschauen.
Das meiste ist überall gleich.
Vereinzelt gibt es unterschiede beim Interpretieren, es gibt aber keinen IBM i Spezifischen interpreter.

Fuerchau
06-05-22, 09:32
Die Doku dazu steht aber sehr schön in der SQL-Reference.
https://www.ibm.com/docs/en/i/7.4?topic=predicates-regexp-like-predicate