SQLite ha una funzione chiamata nullif()
e un'altra funzione chiamata ifnull()
, ognuno dei quali ha uno scopo diverso.
nullif()
consente di trattare determinati valori come NULL. Puoi pensarlo come "restituisci NULL se ...".ifnull()
consente di sostituire i valori NULL con un altro valore. Puoi pensarlo come "se NULL, allora ...".
Quindi fondamentalmente fanno l'opposto l'uno dell'altro. Uno sostituisce i valori NULL con un altro valore e l'altro sostituisce un altro valore con NULL.
Esempi
In alcuni casi, entrambe le funzioni possono restituire lo stesso risultato. Ad esempio:
SELECT
nullif(1, 2),
ifnull(1, 2);
Risultato:
nullif(1, 2) ifnull(1, 2) ------------ ------------ 1 1
Il nullif()
La funzione restituisce una copia del suo primo argomento se gli argomenti sono diversi e NULL se gli argomenti sono gli stessi. In questo caso, gli argomenti sono diversi e restituisce il primo argomento.
Il ifnull()
funzione d'altra parte, restituisce una copia del primo argomento non NULL. In questo caso, entrambi gli argomenti non erano NULL e quindi è stato restituito il primo argomento.
Con il seguente esempio, iniziamo a vedere la differenza tra queste due funzioni:
SELECT
nullif(1, 1),
ifnull(1, 1);
Risultato:
nullif(1, 1) ifnull(1, 1) ------------ ------------ 1
Il nullif()
la funzione restituisce NULL quando entrambi gli argomenti erano gli stessi. In questo caso entrambi gli argomenti erano gli stessi, quindi nullif()
ha fatto il suo lavoro e ha restituito NULL.
Il ifnull()
La funzione restituisce il primo argomento non NULL e quindi in questo caso ha restituito il primo argomento.
Il fatto che entrambi gli argomenti siano gli stessi non significa nulla per ifnull()
. Restituisce semplicemente il primo argomento non NULL. Detto questo, se entrambi gli argomenti sono NULL, restituisce NULL.
Proviamo ad aggiungere alcuni NULL.
SELECT
nullif(NULL, 1),
ifnull(NULL, 1);
Risultato:
nullif(NULL, 1) ifnull(NULL, 1) --------------- --------------- 1
In questo caso, nullif()
restituito NULL perché NULL è il primo argomento (ricorda che nullif()
restituisce il suo primo argomento se entrambi gli argomenti sono diversi).
ifnull()
d'altra parte ha restituito il suo primo argomento non NULL.
Ecco come appare se cambiamo argomento.
SELECT
nullif(1, NULL),
ifnull(1, NULL);
Risultato:
nullif(1, NULL) ifnull(1, NULL) --------------- --------------- 1 1
Entrambi gli argomenti sono diversi e quindi nullif()
restituisce il primo argomento.
Il primo argomento non è NULL e quindi ifnull()
lo restituisce.