[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2008
    Beiträge
    22

    Exclamation SQL Select verhält sich anders als STRSQL

    Hallo,
    ich möchte auf das Feld Modellnummer T0MOD eine Like Suche machen:

    Über STRSQL funktioniert das wie folgt sauber:

    select t0mod from itrpt0
    where t0mod like 'M481%'

    Wenn ich die Definition allerdings in meinen Programm in der Cursor declaration machen funktioniert es nur, wenn ich nach M4816% suchen lassen. M481 führt dann zu keinem Ergebnis. Es kommt auch keine Fehlermeldung. Im Plancache kann ich leider auch nichts finden.

    Hier meine Cursor Definition:

    W9TNR1 ist in diesem Fall 0
    W9MOD2 enthält M481%
    T0MOD ist das DB Feld

    0439.87 C+
    0439.88 C+ and ((:W9MOD2<>' ' and :W9TNR1=0 and T0MOD like :W9MOD2) or
    0439.89 C+ :W9MOD2=' ')
    0439.90 C+

    Hat hier jemand eine Idee, warum das nicht geht. Auf dem Feld T0MOD liegt ein Index!

    Bin hier echt ratlos....

    Komisch das es immer nur mit mindestens 4 Zahlen im Suchstring funktioniert.
    Beispiele: 7995% oder 44DD89% oder EPO4570%

    Danke für Eure Hilfe...

    Gruß
    Olaf

  2. #2
    Registriert seit
    Jan 2001
    Beiträge
    340
    > M4816% suchen lassen. M481 führt dann zu keinem Ergebnis.

    das Feld ist also länger als 4 Stellen

    > W9MOD2 enthält M481%

    nein, es enthält "M481% " ein (mindestens, je nach Feldlänge) blank.

    Das Feld muss mit % bis zum Ende aufgefüllt werden.

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Das % ist auf jeden Fall ja erforderlich, ansonsten hilft ein

    like trim(: MyField)

    um Leerzeichen am Ende und ggf. Anfang zu entfernen, da diese mit zum Ausdruck gehören.
    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

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Ich nehme an, dass es sich bei dem Feld W9MOD2 um ein Feld mit fixer Länge und zwar 5A lang.

    Deshalb wird auch kein Satz gefunden, da das letzte Zeichen ein *Blank sein muss, was jedoch nicht der Fall ist.

    Du hast 3 Möglichkeiten das Ganze richtig zu lösen:
    1. Bei einer Variablen mit fixer Länge fülle das Feld mit %-Zeichen auf.
    2. Definiere die Host Variable W9MOD2 mit variabler Länge entferne alle *Blanks und füge ein % hinzu.
    3. Mach das Ganze im SQL:
    Code:
    Where T0MOD like Trim(:W9MOD2)
    Du kannst auch das Prozent-Zeichen im SQL Setzen:
    Code:
    Where T0MOD Like Trim(:W9MOD2) concat '%'
    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

Similar Threads

  1. SELECT..FOR UPDATE/Embedded SQL
    By KB in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 28-04-16, 14:42
  2. sql select mit zusätzl. Feldern
    By rr2001 in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 07-07-06, 09:56
  3. Cobol-Programm mit Embedded SQL (SELECT CASE)
    By klausgkv in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 08-06-06, 13:47
  4. Satzanzahl Select (embedded SQL)
    By Schorsch in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 08-09-05, 15:22
  5. Offset für SQL - Select
    By Marc_w in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 30-03-05, 11:03

Berechtigungen

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