In MariaDB, il IFNULL()
la funzione ci consente di sostituire i valori NULL con un altro valore.
Sintassi
IFNULL(expr1,expr2)
Se expr1
non è NULL
, IFNULL()
restituisce expr1
; altrimenti restituisce expr2
.
Inoltre, da MariaDB 10.3, NVL()
può essere usato come alias per IFNULL()
funzione. Pertanto, abbiamo invece la possibilità di utilizzare la seguente sintassi:
NVL(expr1,expr2)
Il risultato è lo stesso indipendentemente dalla sintassi utilizzata.
Esempio
Ecco un esempio di base che utilizza NULL
costante:
SELECT IFNULL( null, 'No Value' );
Risultato:
No Value
In questo caso, ho usato IFNULL()
per sostituire il valore NULL con No Value
.
Ecco cosa succede quando il primo argomento non è NULL
:
SELECT IFNULL( 'Spicy', 'No Value' );
Risultato:
Spicy
In questo caso, viene restituito il primo argomento, perché non è NULL
.
Esempio di database
Supponiamo di eseguire la seguente query:
SELECT * FROM Employees;
Risultato:
empId name dept ----- ----- ----- 1 Jess Sales 2 Rohit NULL 3 Zohan Sales 4 Homer NULL
Possiamo vedere che due righe hanno valori NULL nel dept
colonna.
Nella query seguente, utilizziamo IFNULL()
per sostituire i valori NULL con un valore più significativo per il lettore:
SELECT
empId,
name,
IFNULL( dept, 'Not yet assigned' ) AS dept
FROM Employees;
Risultato:
empId name dept ----- ----- ---------------- 1 Jess Sales 2 Rohit Not yet assigned 3 Zohan Sales 4 Homer Not yet assigned
Espressioni
Viene valutato il valore corrente del primo argomento. Pertanto, se forniamo un'espressione come la seguente:
SELECT IFNULL( 3 * 7, 0 );
Otteniamo questo:
21
Quindi, non otteniamo il 3 * 7
parte. Otteniamo il risultato di quell'espressione (che in questo caso è 21
).
Lo stesso vale quando il risultato dell'espressione è NULL
. Ad esempio, se eseguiamo il codice seguente:
SELECT IFNULL( 3 / 0, 0 );
Otteniamo questo:
0.0000
Tuttavia, questo è un esempio pericoloso. Zero è un valore. NULL
non è.
Restituire zero quando c'è un valore NULL potrebbe essere fuorviante o addirittura completamente sbagliato. Immagina se avessimo a che fare con i prezzi. Potremmo finire con un prezzo pari a zero, che potrebbe non essere corretto e costare un sacco di soldi all'azienda.
Pertanto in questi casi di solito è meglio utilizzare un valore più significativo che comunichi al lettore che non esiste alcun valore.
Esempio:
SELECT IFNULL( 3 / 0, 'No value' );
Risultato:
No Value
Il NVL()
Funzione
A partire da MariaDB 10.3, NVL()
è un alias per IFNULL()
. Pertanto, possiamo sostituire IFNULL()
con NVL()
in uno degli esempi precedenti.
Esempio:
SELECT NVL( 3 / 0, 'No value' );
Risultato:
No Value