[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Jun 2001
    Beiträge
    1.975

    was besseres als coalesce?

    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
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    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+$')
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Nov 2020
    Beiträge
    327
    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

  4. #4
    Registriert seit
    Jul 2001
    Beiträge
    2.646
    Ich wäre ja bösartig und würde etwas gegen die bösen Daten tun. Einmal. Dann Ruhe
    www.RZKH.de
    IBM Champion 2022, 2023, 2024
    IBM i Community Advocate https://www.youracclaim.com/badges/6...c-7ad4ba147af6
    Common / CEAC
    http://pub400.com

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Jun 2001
    Beiträge
    1.975
    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

    ??
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  7. #7
    Registriert seit
    Jun 2001
    Beiträge
    1.975
    @böse daten

    Unser horror in der EDV
    Daten aus Excel!

    Immer anders, immer mind. 30 % falsch, immer neue Fehler ...
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  8. #8
    Registriert seit
    Nov 2020
    Beiträge
    327
    Zitat Zitat von Robi Beitrag anzeigen
    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.

  9. #9
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    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:
    Code:
    Select YourColumn, Translate(Left(YourClolumn, 7), ' ', '01234567890')
      from YourTable
      Where Translate(Left(YourColumn, 7), ' ', '01234567890') > '';
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  10. #10
    Registriert seit
    Jun 2001
    Beiträge
    1.975
    @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 ...
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  11. #11
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Zitat Zitat von Robi Beitrag anzeigen
    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
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    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)
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. sql update mit coalesce
    By ILEMax in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 11-08-21, 08:44
  2. SQL count mit coalesce
    By Robi in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 27-07-21, 12:55
  3. SQL Nullwerte nicht zulässig trotz coalesce oder ifnull
    By Progras in forum NEWSboard Programmierung
    Antworten: 11
    Letzter Beitrag: 18-11-16, 11:16

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •