Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come sostituire NULL con un altro valore in SQL Server – ISNULL()

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.