Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

WHERE-KLAUSEL mit DECODE()

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von ustasahi, 16 März 2017.

  1. ustasahi

    ustasahi Neuer Benutzer

    Hallo zusammen, ich hatte vor ein paar Tagen eine Frage gestellt, die ich mittlerweile gelöst habe.

    Nun bin ich wieder an ein Problem geraten, an dem ich verzweifle.

    Folgendes Select Statement ist gegeben:

    Select mandant, auftragsnummer, auftragskennung, kundennummer
    from entnahmeauftrag
    where auftragsnummer like :auftragsnummer


    Diese Select-Anweisung liefert mit eine Tabelle mit den, im select genannten, Spalten.
    Die auftragsnummer, die sich im Where-Teil befindet ist ja das Feld, wozu der Bediener aufgefordert wird eine nummer einzugeben, um somit die Selektion evtl einzuschränken.

    Momentan ist das möglich und zwar mit dem "%" Zeichen. Sprich wenn der Benutzer nichts in das Feld eingibt, erscheinen auch keine Daten. Der Benutzer müsste "%" eingeben, damit irgendwelche Daten erscheinen. ABER der Benutzer soll auch in der Lage sein nichts einzugeben, damit Daten erscheinen.

    Dazu habe ich recherchiert und fest gestellt, dass man bestimmte Felder mit der Decode-Funktion "decoden" kann, jedoch immer in der Select-Anweisung.
    Weiß jemand, wie man das in der Where-Klausel macht?

    Also z.B.

    Select mandant, auftragsnummer, auftragskennung, kundennummer
    from entnahmeauftrag
    where auftragsnummer like decode(auftragsnummer, "", %, auftragsnummer)


    Das "" ist quasi wenn der Benutzer nichts in das Feld eingibt.

    Hoffe ihr könnt mir helfen.
    Danke euch :)
     
  2. ukulele

    ukulele Datenbank-Guru

    Also dein :auftragsnummer in deinem gezeigten Select wird vermutlich von deiner Anwendung in den Such-String übersetzt, das ist so erstmal kein SQL Bestandteil daher kann ich dazu nur Vermutungen anstellen.

    DECODE() scheint aus Oracle zu sein, das kenne ich noch nicht. Du nutzt aber MySQL(?) und dort gibt es das nicht 1:1. Funktionieren könnte es aber so wie du es vor hast:
    MySQL equivalent of DECODE function in Oracle

    Du könntest aber auch auf die Idee kommen das % grundsätzlich vor (und hinter) den Suchstring zu packen damit immer mit der Methode gesucht wird.
     
  3. BerndB

    BerndB Datenbank-Guru

    Hi,
    nur kurz als Info: DECODE und ENCODE gibt es in MySQL

    Code:
    mysql> SELECT DECODE(ENCODE("Hallo","crypt"),"crypt");
    +-----------------------------------------+
    | DECODE(ENCODE("Hallo","crypt"),"crypt") |
    +-----------------------------------------+
    | Hallo                                   |
    +-----------------------------------------+
    1 row in set, 2 warnings (0,00 sec)
    
     
  4. ukulele

    ukulele Datenbank-Guru

    Ah ok ich habs falsch rum gelesen, Oracle kann wohl kein DECODE().
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden