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
.