Das Äquivalent der Dekodierungsfunktion von Oracle in MySQL

Mehvish Ashiq 20 Juni 2023
Das Äquivalent der Dekodierungsfunktion von Oracle in MySQL

Dieses Tutorial stellt die drei alternativen Implementierungen vor, die wir als Äquivalent zu Oracles decode()-Funktion in MySQL verwenden können. Dafür verwenden wir IF(), CASE und die Kombination aus FIELD() und ELT().

das Äquivalent der Decode-Funktion von Oracle in MySQL

MySQL hat seine decode()-Funktion, aber wir werden etwas über die Implementierung lernen, die als Alternative zu Oracles decode()-Funktion verwendet würde.

Bevor Sie auf die Implementierungen eingehen, ist es besser, den Unterschied zwischen der MySQL-Funktion decode() und der Oracle-Funktion decode() zu lernen.

MySQL decode() vs. Oracle decode()

Die MySQL-Funktion decode() dekodiert den kodierten String und gibt einen Original-String aus. Während die Oracle-Funktion decode() einen Ausdruck nacheinander mit jedem Suchelement vergleicht.

Die Oracle-Datenbank gibt ein entsprechendes Ergebnis aus, wenn der Ausdruck dem Suchwert entspricht. In Oracle decode() wird der Standardwert zurückgegeben, wenn keine Übereinstimmung gefunden wird, und NULL zurückgegeben, wenn es keinen Standardwert gibt.

Um es mit einem Codebeispiel zu üben, müssen wir zuerst eine Tabelle haben. Wir erstellen eine Tabelle namens users mit ID, USERNAME und LEVELS als Attribute.

Wir fügen auch einige Daten ein, um klar zu lernen. In diesem Lernprogramm können Sie mithilfe der unten angegebenen Abfragen eine Tabelle erstellen und füllen, um mit uns voranzukommen.

Beispielcode (Tabelle erstellen und füllen):

# Create a table
CREATE TABLE users(
  ID INT NOT NULL AUTO_INCREMENT,
  USERNAME VARCHAR(45) NOT NULL,
  LEVELS INT NOT NULL,
  PRIMARY KEY (ID));

# Insert data
INSERT INTO users (USERNAME, LEVELS) VALUES
('mehvishashiq', 1),
('thomas011', 2),
('danielchristopher', 3),
('sairajames', 4);

SELECT * FROM users;

Ausgang:

| ID   | USERNAME          | LEVELS |
| ---- | ----------------- | ------ |
| 1    | mehvishashiq      | 1      |
| 2    | thomas011         | 2      |
| 3    | danielchristopher | 3      |
| 4    | sairajames        | 4      |

Verwenden Sie CASE, um die decode()-Funktion von Oracle in MySQL zu simulieren

Beispielcode:

SELECT USERNAME,
CASE
  WHEN LEVELS = 1 THEN 'Level One'
  WHEN LEVELS = 2 THEN 'Level Two'
  WHEN LEVELS = 3 THEN 'Level Three'
  WHEN LEVELS = 4 THEN 'Level Four'
ELSE 'Beginner Level'
END AS USER_LEVEL
FROM users;

Ausgang:

| USERNAME          | USER_LEVEL  |
| ----------------- | ----------- |
| mehvishashiq      | Level One   |
| thomas011         | Level Two   |
| danielchristopher | Level Three |
| sairajames        | Level Four  |

Die CASE-Anweisung emuliert auch die decode()-Funktion von Oracle, vergleicht jeden Ausdruck mit jedem Suchwert und gibt das entsprechende Ergebnis zurück. Hier wird der Standardwert Beginner Level zurückgegeben, wenn keine Übereinstimmung gefunden wird.

Verwenden Sie IF(), um die Funktion decode() von Oracle in MySQL zu simulieren

Wenn wir möchten, dass die Ergebnisse in Binärwerte aufgeteilt werden, können wir IF() verwenden.

Beispielcode:

SELECT USERNAME, IF(LEVELS >= 3,'Top Rates Plus','Top Rated') AS USER_LEVEL from users;

Ausgang:

| USERNAME          | USER_LEVEL     |
| ----------------- | -------------- |
| mehvishashiq      | Top Rated      |
| thomas011         | Top Rated      |
| danielchristopher | Top Rated Plus |
| sairajames        | Top Rated Plus |

Verwenden Sie die Kombination von FIELD & ELT , um die decode()-Funktion von Oracle in MySQL zu simulieren

Beispielcode:

SELECT USERNAME,
IFNULL(ELT( FIELD(LEVELS,1,2,3,4),
           'Level One', 'Level Two',
           'Level Three', 'Level Four'
        ),'Beginner Level')
As USER_LEVEL FROM users;

Ausgang:

| USERNAME          | USER_LEVEL  |
| ----------------- | ----------- |
| mehvishashiq      | Level One   |
| thomas011         | Level Two   |
| danielchristopher | Level Three |
| sairajames        | Level Four  |

Hier gibt FIELD() die Position der Argumentliste des Strings aus, die mit LEVELS übereinstimmt. Nun gibt ELT() einen String aus der Argumentliste von ELT() an einer durch FIELD() spezifizierten Position aus.

Wenn zum Beispiel LEVELS 2 ist, gibt FIELD(LEVELS,1,2,3,4) 2 zurück. Denn 2 ist das zweite Argument von FIELD (hier LEVEL nicht mitzählen).

Dann gibt ELT(2, 'Level One', 'Level Two', 'Level Three', 'Level Four') Level Two zurück, was ein zweites Argument von ELT() ist (nicht zählen Sie hier das FIELD() als Argument).

Ferner gibt IFNULL einen Standardwert USER_LEVEL zurück, wenn kein Wert von LEVELS in der Liste übereinstimmt. Auf diese Weise können wir die Kombination aus ELT und FIELD verwenden, um die decode()-Funktion von Oracle in MySQL zu simulieren.

Denken Sie daran, dass diese Lösung angesichts der Leistung und Lesbarkeit möglicherweise keine gute Wahl ist, aber es ist gut, die Zeichenfolgenfunktionen von MySQL zu erkunden.

Ein weiterer erwähnenswerter Punkt ist, dass die Ausgabe von FIELD() nicht zwischen Groß- und Kleinschreibung unterscheidet. Das bedeutet, dass FIELD('B','B') und FIELD('b','B') beide dasselbe Ergebnis zurückgeben, nämlich 1.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook