[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Nov 2009
    Beiträge
    208

    Auswahlfehler für Feld *N.

    Guten Morgen

    ein
    Code:
    SELECT * FROM DATEI WHERE F1 = 'W1' and F2 = 'W2' and
    F3 = 'W3' and dec(digits(substr(F4, 1, 7)), 7, 0)    
     not between                                                       
    1 and 9999999
    bringt einen Auswahlfehler für Feld *N (mit und ohne DEC )

    Eine Kontrolle a la
    Code:
    SELECT * FROM DATEI WHERE F1 = 'W1' ... 
    ... and substr(F4, 1, 1) not 
    in('0', '1',  '2', '3', '4', '5', '6', '7', '8', '9')
    für alle Stellen in F4, von 1 bis 7, bringt nie einen Satz. Also kein Fehler.

    Was ist falsch?
    Dietlinde Beck

    (der "not between" ist schon der 1. Teil der Fehlersuche, eigendlich verknüpfe ich hier mit einen numerischen Feld einer anderen Datei)

  2. #2
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    In deinem Kontroll-Select prüfst du nur die erste Stelle ... substr(F4, 1, 1)
    Im obrigen holst du dir jedoch 7 Characters. Und da wird es wohl irgendwo ungültige numerische Zeichen enthalten.

    lg Andreas

  3. #3
    Registriert seit
    Nov 2009
    Beiträge
    208
    Nein

    für alle Stellen in F4, von 1 bis 7, bringt nie einen Satz. Also kein Fehler.
    das hast du wohl überlesen!

  4. #4
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Dein Select mit dem Fehler:
    and substr(F4, 1, 7)

    Dein Kontroll-Select:
    and substr(F4, 1, 1)

    Das sind 2 unterschiedliche substrings

  5. #5
    Registriert seit
    Nov 2009
    Beiträge
    208
    ok, dann so: (formatiert als Zitat, da sonst immer verschoben)

    SELECT * FROM DATEI WHERE F1 = 'W1' ...
    ... and substr(F4, 1, 1) not
    in('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')
    kein Satz. Also kein Fehler.

    SELECT * FROM DATEI WHERE F1 = 'W1' ...
    ... and substr(F4, 2, 1) not
    in('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')
    kein Satz. Also kein Fehler.


    SELECT * FROM DATEI WHERE F1 = 'W1' ...
    ... and substr(F4, 3, 1) not
    in('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')
    kein Satz. Also kein Fehler.


    SELECT * FROM DATEI WHERE F1 = 'W1' ...
    ... and substr(F4, 4, 1) not
    in('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')
    kein Satz. Also kein Fehler.



    SELECT * FROM DATEI WHERE F1 = 'W1' ...
    ... and substr(F4, 5, 1) not
    in('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')
    kein Satz. Also kein Fehler.




    SELECT * FROM DATEI WHERE F1 = 'W1' ...
    ... and substr(F4, 6, 1) not
    in('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')
    kein Satz. Also kein Fehler.


    SELECT * FROM DATEI WHERE F1 = 'W1' ...
    ... and substr(F4, 7, 1) not
    in('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')
    kein Satz. Also kein Fehler.

  6. #6
    Registriert seit
    Apr 2019
    Beiträge
    43
    Wenn nur geprüft werden soll ob es ein nicht numerischen Inhalt gibt:
    Code:
    SELECT * FROM DATEI WHERE F1 = 'W1' and F2 = 'W2' and
    F3 = 'W3' and LCASE(substr(F4, 1, 7))<>UCASE(substr(F4, 1, 7))
    Bei numerischen Werten gibts kein Unterschied in Lower oder Upper Case.

  7. #7
    Registriert seit
    Nov 2003
    Beiträge
    2.304
    Was zeigt dieser SELECT ?

    PHP-Code:
    SELECT digits(substr(F417)) FROM DATEI 
    WHERE F1 
    'W1' and F2 'W2' and F3 'W3' and 
    substr(F411in ('0','1','2','3','4','5','6','7','8','9'

  8. #8
    Registriert seit
    Dec 2004
    Beiträge
    203
    Hallo.

    statt :
    SELECT * FROM DATEI WHERE F1 = 'W1' and F2 = 'W2' and
    F3 = 'W3' and dec(digits(substr(F4, 1, 7)), 7, 0)
    not between
    1 and 9999999

    vielleicht so (ohne digits ...)
    SELECT * FROM DATEI WHERE F1 = 'W1' and F2 = 'W2' and
    F3 = 'W3' and dec(substr(F4, 1, 7), 7, 0)
    not between
    1 and 9999999

    Gruß,
    Ralf

  9. #9
    Registriert seit
    Nov 2009
    Beiträge
    208
    Hallo Ralf.

    ohne DIGITS geht es. DANKE

    Ich hatte es in der 1. Version ohne DEC

    Ich dachte immer DIGITS macht ein alpa Feld numerisch,
    DEC auch aber DEC kann Komma interpretieren.

    Warum ist hier DEC Fehlerfrei und DIGITS mit Fehler?

  10. #10
    Registriert seit
    Nov 2009
    Beiträge
    208
    Wenn nur geprüft werden soll ob es ein nicht numerischen Inhalt gibt:
    Code:
    SELECT * FROM DATEI WHERE F1 = 'W1' and F2 = 'W2' and
    F3 = 'W3' and LCASE(substr(F4, 1, 7))<>UCASE(substr(F4, 1, 7))
    Bei numerischen Werten gibts kein Unterschied in Lower oder Upper Case.[/Code]

    keine so gute Idee, was ist mit Blank , ; : .!"§$%&/()=?`´ die haben alle kein Upper/Lower

    Oder?

  11. #11
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Wenn der Eingangsparameter Char ist, macht digits ein DEC(36, 31) daraus.
    Du müsstest das Ergebnis entsprechend casten.
    Besser ist jedoch die Lösung vom Ralf.

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Das verhindert jedoch nicht unbedingt, dass der Select abstürzt.
    Der Grund liegt in der Optimierung, dass vor der Umwandlung in Dec auch ungültige Daten vorbeikommen können.

    DIGITS mach aus einem numerischen Feld ein Zeichenfeld ohne Komma und Vorzeichen, also ein 11,2-Feld wird zu CHAR(11).
    Durch Aotocast (s.o. 31,9) wird eben versucht, ein numerisches Feld aus dem Zeichenfeld zu generieren. Wenn da nun keine Ziffern drinstehen, knallts.

    Wie ist der Wert denn genau aufgebaut?
    Hast du da immer 7 Ziffern oder ist das variabel?
    Bei festen Stellen kannst du den Between auch mit Zeichenkonstanten machen "between '0000000' and '9999999'".
    Bei variablen Zeichenlängen geht es auch folgendermaßen:

    right('0000000' concat substr(f4, 1, 7), 7) between '0000000' and '9999999'
    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. input/output feld dspf --> automatisch aus Feld springen
    By _MG_ in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 15-09-17, 16:02
  2. Cobol update Key Feld
    By TheDevil in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 20-05-16, 09:25
  3. GRAPHIC-Feld im RPG
    By CHGVAR in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 18-12-15, 11:04
  4. darstellung num-feld
    By easchbac in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 20-02-15, 10:47
  5. SQL Datumsabfrage aus case Feld
    By mk in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 29-08-14, 10:24

Berechtigungen

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