Quando si esegue una query su un database di SQL Server, a volte non si desidera che i valori Null vengano restituiti nel set di risultati. E potrebbero esserci momenti in cui vuoi che vengano restituiti. Ma potrebbero esserci anche momenti in cui vuoi che vengano restituiti, ma con un valore diverso.
Questo è ciò che il ISNULL()
la funzione è per.
ISNULL()
è una funzione T-SQL che ti permette di sostituire NULL
con un valore specificato a tua scelta.
Esempio
Ecco una query di base che restituisce un piccolo set di risultati:
SELECT TaskCode AS Result FROM Tasks;
Risultato:
Result ------ cat123 null null pnt456 rof789 null
Possiamo vedere che ci sono tre righe che contengono valori nulli.
Se non volessimo che i valori null appaiano come tali, potremmo usare ISNULL()
per sostituire null
con un valore diverso.
In questo modo:
SELECT ISNULL(TaskCode, 'N/A') AS Result FROM Tasks;
Risultato:
Result ------ cat123 N/A N/A pnt456 rof789 N/A
Potremmo anche sostituirlo con la stringa vuota:
SELECT ISNULL(TaskCode, '') AS Result FROM Tasks;
Risultato:
Result ------ cat123 pnt456 rof789
Nota che ISNULL()
richiede che il secondo argomento sia di un tipo che può essere convertito in modo implicito nel tipo di dati del primo argomento. Questo perché restituisce il risultato utilizzando il tipo di dati del primo argomento.
Prevenire la scomparsa delle righe nulle
Esistono alcune funzioni T-SQL in cui i valori null vengono eliminati dal set di risultati. In questi casi, i valori nulli non verranno restituiti affatto.
Mentre questo potrebbe essere un risultato desiderabile in alcuni casi, in altri potrebbe essere disastroso, a seconda di cosa devi fare con i dati una volta che sono stati restituiti.
Un esempio di tale funzione è STRING_AGG()
. Questa funzione consente di restituire il set di risultati come un elenco delimitato. Tuttavia, elimina anche i valori Null dal set di risultati. Quindi, se usiamo questa funzione con i dati di esempio sopra, ci ritroveremo con tre risultati invece di sei:
SELECT STRING_AGG(TaskCode, ', ') AS Result FROM Tasks;
Risultato:
Result ---------------------- cat123, pnt456, rof789
Quindi le tre righe contenenti valori nulli non vengono restituite.
In molti casi, questo è un risultato perfetto, poiché il nostro set di risultati non è ingombra di valori nulli. Tuttavia, ciò potrebbe anche causare problemi, a seconda dell'utilizzo dei dati.
Pertanto, se vogliamo mantenere le righe con valori null, possiamo usare ISNULL()
per sostituire i valori nulli con un altro valore:
SELECT STRING_AGG(ISNULL(TaskCode, 'N/A'), ', ') AS Result FROM Tasks;
Risultato:
Result ------------------------------------- cat123, N/A, N/A, pnt456, rof789, N/A
La funzione COALESCE()
Il ISNULL()
La funzione funziona in modo simile a COALESCE()
funzione. Quindi potremmo sostituire il codice sopra con questo:
SELECT STRING_AGG(COALESCE(TaskCode, 'N/A'), ', ') AS Result FROM Tasks;
E ottieni lo stesso risultato:
Result ------------------------------------- cat123, N/A, N/A, pnt456, rof789, N/A
Tuttavia, ci sono alcune differenze nel modo in cui si comportano le due funzioni. Per ulteriori informazioni sulle differenze, ecco un confronto di COALESCE()
e ISNULL()
sul sito Web Microsoft.