Ab MariaDB 10.3, NVL()
kann als Alias für IFNULL()
verwendet werden Funktion. Daher ermöglichen uns beide Funktionen, NULL-Werte durch andere Werte zu ersetzen.
Syntax
NVL(expr1,expr2)
Wenn expr1
ist nicht NULL
, NVL()
gibt expr1
zurück ; andernfalls wird expr2
zurückgegeben .
Gegeben NVL()
ist ein Alias für IFNULL()
, können wir auch die folgende Syntax verwenden:
IFNULL(expr1,expr2)
Beide oben genannten Syntaxen geben das gleiche Ergebnis zurück.
Beispiel
Hier ist ein einfaches Beispiel, das den NULL
verwendet Konstante:
SELECT NVL( null, 'No Value' );
Ergebnis:
No Value
In diesem Fall habe ich NVL()
verwendet um den NULL-Wert durch No Value
zu ersetzen .
Folgendes passiert, wenn das erste Argument nicht NULL
ist :
SELECT NVL( 'Spicy', 'No Value' );
Ergebnis:
Green
In diesem Fall wird das erste Argument zurückgegeben, da es nicht NULL
ist .
Datenbankbeispiel
Angenommen, wir führen die folgende Abfrage aus:
SELECT * FROM Employees;
Ergebnis:
empId name dept ----- ----- ----- 1 Jess Sales 2 Rohit NULL 3 Zohan Sales 4 Homer NULL
Wir können sehen, dass zwei Zeilen NULL-Werte in dept
haben Spalte.
In der folgenden Abfrage verwenden wir NVL()
um die NULL-Werte durch einen aussagekräftigeren Wert für den Leser zu ersetzen:
SELECT
empId,
name,
NVL( dept, 'Not yet assigned' ) AS dept
FROM Employees;
Ergebnis:
empId name dept ----- ----- ---------------- 1 Jess Sales 2 Rohit Not yet assigned 3 Zohan Sales 4 Homer Not yet assigned
Ausdrücke
Der aktuelle Wert des ersten Arguments wird ausgewertet. Wenn wir also einen Ausdruck wie den folgenden angeben:
SELECT NVL( 4 * 10, 0 );
Wir bekommen das:
40
Wir bekommen also nicht 4 * 10
Teil. Wir erhalten das Ergebnis dieses Ausdrucks (in diesem Fall 40
).
Dasselbe gilt, wenn das Ergebnis des Ausdrucks NULL
ist :
SELECT NVL( 4 / 0, 0 );
Ergebnis:
0.0000
Dies ist jedoch ein gefährliches Beispiel. Null ist ein Wert. NULL
ist nicht.
Null zurückzugeben, wenn es einen NULL-Wert gibt, könnte irreführend oder sogar völlig falsch sein. Stellen Sie sich vor, wir hätten es mit Preisen zu tun. Wir könnten am Ende einen Preis von Null erhalten, was falsch sein und das Unternehmen viel Geld kosten könnte.
In solchen Fällen ist es normalerweise besser, einen aussagekräftigeren Wert zu verwenden, der dem Leser vermittelt, dass es keinen Wert gibt.
Beispiel:
SELECT NVL( 4 / 0, 'No value' );
Ergebnis:
No Value
Der IFNULL()
Funktion
Wie bereits erwähnt, NVL()
ist ein Alias für IFNULL()
. Daher können wir NVL()
ersetzen mit IFNULL()
in einem der obigen Beispiele.
Beispiel:
SELECT IFNULL( 4 / 0, 'No value' );
Ergebnis:
No Value