PDA

View Full Version : was besseres als coalesce?



Seiten : [1] 2

Robi
05-05-22, 11:52
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

Fuerchau
05-05-22, 12:22
Dazu bietet sich eine RegEx-Abfrage an.
Denke dir das passende Muster aus und suche alle, wo das Muster nicht passt:

REGEXP_LIKE(feld, muster).

Z.B: not regexp_like(trim(feld), '^\d+$')

Andreas_Prouza
05-05-22, 12:23
Mit Regex geht das recht gut:

regexp_count('49d49494', '[^0-9]')
0 = Alles nur Zahlen
1 = Böse Zeichen gefunden

values(CASE WHEN regexp_count('49d49494', '[^0-9]') = 0 THEN dec('49d49494', 7, 0) ELSE 0 end)

lg Andreas

holgerscherer
05-05-22, 12:27
Ich wäre ja bösartig und würde etwas gegen die bösen Daten tun. Einmal. Dann Ruhe :)

Fuerchau
05-05-22, 12:29
Wenn man gestern schon gewusst hätte was heute böse ist lässt sich ja geradezu in der aktuellen Weltpolitik erleben.
Nur, an dem "Einmal. Dann Ruhe" scheiterts halt noch.

Robi
05-05-22, 12:35
Danke Euch, ...
ab wann geht das?
Ich bekomme bei
(alle anzeigen)

select case when
regexp_count(trim(substr(FELD, 1, 7)), '[^0-9]') = 0
then
coalesce(dec(coalesce(trim(substr(FELD, 1, 7)), 0, 7, 0), 0)
else 0 end, FELD
from datei


ein QQQSVREG der art *SRVPGM in QSYS nicht gefunden

V7R3M0

??

Robi
05-05-22, 12:37
@böse daten

Unser horror in der EDV
Daten aus Excel!

Immer anders, immer mind. 30 % falsch, immer neue Fehler ...

Andreas_Prouza
05-05-22, 12:49
ein QQQSVREG der art *SRVPGM in QSYS nicht gefunden

Es muss das Produkt 5770-SS1 International Components for Unicode installiert sein.
Das scheint bei euch zu fehlen.

B.Hauser
05-05-22, 16:25
Wenn's nur darum geht, zu prüfen, ob auf den ersten 7 Zeichen Zahlen stehen, dann sollte es auch ohne Regular Expressions gehen:

In dem folgenden Beispiel werden nur die "bösen" Daten selektiert:

Select YourColumn, Translate(Left(YourClolumn, 7), ' ', '01234567890')
from YourTable
Where Translate(Left(YourColumn, 7), ' ', '01234567890') > '';

Robi
06-05-22, 08:11
@Andreas und Baldur
funktioniert fast ...

gibt es einen brauchbaren, zur i passenden link, in dem ich die Syntax mal studieren kann?

Nur wenn FELd komplett leer ist, funktioniert es nicht.

@Birgitta
nein, es müssen nicht immer 7 Ziffern sein

0000001 kann da genauso stehen wie
1
001
ungefähr 1
weis ich nicht
liefer ich nach
15:30

Echtes Anwender Excel halt ...