50 Stimmen

MySQL-Entsprechung der DECODE-Funktion in Oracle

Ich versuche, eine Entsprechung der DECODE-Funktion in MySQL zu finden. Es funktioniert wie folgt:

Select Name, DECODE(Age,
       13,'Thirteen',14,'Fourteen',15,'Fifteen',16,'Sixteen',
       17,'Seventeen',18,'Eighteen',19,'Nineteen',
       'Adult') AS AgeBracket
FROM Person

Die DECODE-Funktion vergleicht den Wert der Spalte 'Alter' mit 13, 14, 15 und gibt den entsprechenden Stringwert 'Dreizehn', 'Vierzehn' zurück. Wenn nichts übereinstimmt, wird der Standardwert 'Erwachsener' zurückgegeben.

Gibt es eine Idee, welche Funktion in MySQL diese Aufgabe übernehmen kann? Danke!

KLÄRUNG: Ich stimme zu, dass die Verwendung von CASE eine Möglichkeit ist, das gewünschte Ergebnis zu erzielen, aber ich bin eher auf der Suche nach einer Funktion aus Leistungsgründen und aus anderen Gründen.

5 Stimmen

Eine Funktion wird nicht schneller sein als die CASE-Anweisung

0 Stimmen

Das ELT von Mysql scheint ein DECODE-Alternativprogramm zu sein: dev.mysql.com/doc/refman/4.1/de/

1voto

Danubian Sailor Punkte 21985

Wenn die zusätzliche Tabelle nicht passt, können Sie Ihre eigene Funktion für die Übersetzung schreiben.

Der Vorteil von sql function gegenüber case ist, dass man sie an verschiedenen Stellen verwenden kann und die Übersetzungslogik an einer Stelle bleibt.

0voto

Niteesh Kumar Punkte 1

Sie können if() anstelle von decode() in mySql wie folgt verwenden Diese Abfrage wird alle geraden id-Zeilen ausgeben.

mysql> select id, name from employee where id in
-> (select if(id%2=0,id,null) from employee);

0voto

Lukas Eder Punkte 194234

Während die anderen Antworten richtig funktionieren, wenn es keine NULL Werte beteiligt sind, ist hier ein NULL sichere Antwort (denn das ist es, was Oracle's DECODE wirklich tut):

SELECT
  Name, 
  CASE
    WHEN Age <=> 13 THEN 'Thirteen'
    WHEN Age <=> 14 THEN 'Fourteen'
    WHEN Age <=> 15 THEN 'Fifteen'
    ...
  END AS AgeBracket
FROM Person

-9voto

vitali_y Punkte 382

Versuchen Sie dies:

Select Name, ELT(Age-12,'Thirteen','Fourteen','Fifteen','Sixteen',
   'Seventeen','Eighteen','Nineteen','Adult','Adult','Adult','Adult',
   'Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult',
   'Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult',
   'Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult',
   'Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult',
   'Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult',
   'Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult',
   'Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult',
   'Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult',
   'Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult',
   'Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult',
   'Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult',
   'Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult') AS AgeBracket FROM Person

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X