[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Aug 2006
    Beiträge
    2.074

    Alpha-Zeichen in Artikelnr V6R1

    Hallo *all,
    ich hatte ja zuletzt hier im Forum die Möglichkeit kennengelernt wie man z.B. nur Sätze mitnumerischen Artikelnr bekommt.
    Funktioniert soweit auch ganz gut.
    Code:
     
     create view rptrade/xx as                                       
    select * from dat015 where (dec(case when artikelnr > '0'                 
     then artikelnr else '0' end, 5, 0) > 0                       
    and                                                        
      substr(artikelnr, 6, 2) <> '-A')
    Wenn ich auf XX ein select mache bekomme ich die gewünschten Daten.
    Wenn ich ein Query darauf mache bekomme ich einen Fehler
    Nachrichten-ID . . . . : QRY2283 Bewertung . . . . . . : 30 Nachrichtenart . . . . : Diagnose Sendedatum . . . . . . : 08.08.19 Sendezeit . . . . . . : 11:15:56
    Nachricht . . . : Auswahlfehler für Feld ARTIKELNR. Ursache . . . . : Die Abfrage wurde nicht ausgeführt, da ein Vergleichsoperand auf Daten aus Feld ARTIKELNR (in Satz 1424 der Datei DAT015 in Bibliothek RPTRADE, die nicht gleich *N sind,) zugreift. Die Daten aus Feld ARTIKELNR sind nicht notwendigerweise falsch, da es sich bei dem Operanden möglicherweise um einen Ausdruck handelt, der neben Feld ARTIKELNR auch andere Felder und Konstanten einbezieht. Ferner ist es möglich, dass ...

    Die Daten sehen so aus:
    ARTIKELNR
    ArtikelNr
    59234
    59237
    59281
    59277
    59288
    59281-A
    59277-A
    59288-A
    59290-A
    59292-A
    59294-A
    58195-A
    59295-A

    Was muß ich machen damit die Query sauber läuft?
    GG 4314 GG

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Was soll dieser Blödsinn?
    (dec(case when artikelnr > '0'
    then artikelnr else '0' end, 5, 0)

    Dein Problem ist, dass die Dec-Umwandlung immer durchgeführt wird und zwar unabhängig ob der 2. Vergleich dann zieht oder nicht.
    Wofür ist die Dec-Konvertierung denn überhaupt gut?
    Da reicht doch auch ArtikelNr >= '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

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Was willst Du, nur die Artikel-Nr., die andere Zeichen als Ziffern enthalten?
    Da gibt es mehrere Möglichkeiten.

    1. Ohne Regular Expressions
    Code:
    Select FieldX, ....
       From ...
       Where Trim(Translate(FieldX, '          ', '1234567890')) > ''
    2. Mit Regular Expressions - müsste ab Release 7.1 verfügbar sein
    Code:
    Select FieldX 
       From ...
       Where RegexP_Like(Trim(FieldX), '[^\d]')
    Birgitta
    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

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Für RegEx in SQL sind Zusatzoptionen zu installieren die gerne vergessen werden.
    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

  5. #5
    Registriert seit
    Aug 2006
    Beiträge
    2.074
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Was willst Du, nur die Artikel-Nr., die andere Zeichen als Ziffern enthalten?
    Da gibt es mehrere Möglichkeiten.

    1. Ohne Regular Expressions
    Code:
    Select FieldX, ....
       From ...
       Where Trim(Translate(FieldX, '          ', '1234567890')) > ''
    2. Mit Regular Expressions - müsste ab Release 7.1 verfügbar sein
    Code:
    Select FieldX 
       From ...
       Where RegexP_Like(Trim(FieldX), '[^\d]')
    Birgitta
    Hallo,

    ich will eigentlich nur die Artikel-Nr haben die numerisch sind. Sprich alles andere wie mit -A oder Texte wie Artikel-Nr (kommt vom Import aus Excel) will ich nicht.

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Dann nimm Birgittas Funktion:

    Trim(Translate(FieldX, ' ', '1234567890')) <> ''

    Der Translate ersetzt alle Ziffern durch Blanks, der Trim entfernt alle Blanks vor und nachher.
    Wenn dann noch was über ist, ist es ungleich Leer.
    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

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Dann must Du lediglich bei meiner 1. Lösung das Größerzeichen durch ein Gleichheitszeichen ersetzen und schon hast Du die numerischen Artikeln-Nr.

    Birgitta
    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

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Stimmt, da habe ich das doch glatt negiert;-).
    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

  9. #9
    Registriert seit
    Aug 2006
    Beiträge
    2.074
    Danke für die Hilfe,

    wobei die Frage warum das SQL anders reagiert als das Query noch nicht beantwortet ist.
    vermutlich gibt es dazu auch keine logische Antwort.

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Das liegt dann an der unterschiedlichen Betrachtung des Optimisers.
    Hast du z.B. eine Where-Klausel und es kann ein Index genommen werden, kommt das Ergebnis u.U. an den fehlerhaften Daten nicht vorbei.
    Ist ein Tablescan erforderlich oder ein ungünstiger Index, liegen die falschen Daten ggf. mit im Zwischenergebnis.

    Nun kommt es auch noch auf dein Release an.
    Je nach dem ob V5, V6, V7 arbeitet der Optimizer immer mal wieder anders.
    Und da nahm der Query/400 die sog. ClassicalQueryEngine (CQE) und SQL die SQLWQueryEngine (SQE).
    Ab irgend einem Release (frag Birgitta) wurde die CQE abgeschafft.
    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. Hex Werte in Alpha übernehmen
    By msost in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 04-03-16, 16:16
  2. V6R1 Datensicherung
    By KingofKning in forum IBM i Hauptforum
    Antworten: 12
    Letzter Beitrag: 11-11-15, 11:40
  3. Kovertierung numerisch nach alpha in RPG IV
    By Michael Rude in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 11-06-03, 12:46
  4. SQL-Alpha in Numeric
    By HoScHiE in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 13-10-01, 13:36
  5. Alpha in numeric - SQL/QRY
    By HoScHiE in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 02-10-01, 17:16

Berechtigungen

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