Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So ersetzen Sie NULL durch einen anderen Wert in SQL Server – ISNULL()

Beim Abfragen einer SQL Server-Datenbank kann es vorkommen, dass Sie nicht möchten, dass Nullwerte in Ihrer Ergebnismenge zurückgegeben werden. Und es kann Zeiten geben, in denen Sie sie zurückgeben möchten. Aber es kann auch vorkommen, dass Sie sie zurückgeben möchten, aber mit einem anderen Wert.

Dafür steht ISNULL() Funktion ist für.

ISNULL() ist eine T-SQL-Funktion, mit der Sie NULL ersetzen können mit einem festgelegten Wert Ihrer Wahl.

Beispiel

Hier ist eine einfache Abfrage, die eine kleine Ergebnismenge zurückgibt:

SELECT TaskCode AS Result
FROM Tasks;

Ergebnis:

Result
------
cat123
null  
null  
pnt456
rof789
null  

Wir können sehen, dass es drei Zeilen gibt, die Nullwerte enthalten.

Wenn wir nicht wollten, dass die Nullwerte als solche erscheinen, könnten wir ISNULL() verwenden um null zu ersetzen mit einem anderen Wert.

So:

SELECT ISNULL(TaskCode, 'N/A') AS Result 
FROM Tasks;

Ergebnis:

Result
------
cat123
N/A   
N/A   
pnt456
rof789
N/A   

Wir könnten es auch durch den leeren String ersetzen:

SELECT ISNULL(TaskCode, '') AS Result 
FROM Tasks;

Ergebnis:

Result
------
cat123
      
      
pnt456
rof789
        

Beachten Sie, dass ISNULL() erfordert, dass das zweite Argument einen Typ hat, der implizit in den Datentyp des ersten Arguments konvertiert werden kann. Das liegt daran, dass es das Ergebnis mit dem Datentyp des ersten Arguments zurückgibt.

Verhindern, dass Nullzeilen verschwinden

Es gibt einige T-SQL-Funktionen, bei denen Nullwerte aus der Ergebnismenge entfernt werden. In solchen Fällen werden überhaupt keine Nullwerte zurückgegeben.

Während dies in einigen Fällen ein wünschenswertes Ergebnis sein kann, kann es in anderen Fällen katastrophal sein, je nachdem, was Sie mit den Daten nach der Rückgabe tun müssen.

Ein Beispiel für eine solche Funktion ist STRING_AGG() . Mit dieser Funktion können Sie die Ergebnismenge als begrenzte Liste zurückgeben. Es eliminiert jedoch auch Nullwerte aus der Ergebnismenge. Wenn wir also diese Funktion mit den obigen Beispieldaten verwenden, erhalten wir am Ende drei statt sechs Ergebnisse:

SELECT STRING_AGG(TaskCode, ', ') AS Result 
FROM Tasks;

Ergebnis:

Result                
----------------------
cat123, pnt456, rof789

Die drei Zeilen mit Nullwerten werden also nicht zurückgegeben.

In vielen Fällen ist dies ein perfektes Ergebnis, da unsere Ergebnismenge nicht mit Nullwerten überladen ist. Dies kann jedoch auch zu Problemen führen, je nachdem, wofür die Daten verwendet werden sollen.

Wenn wir also die Zeilen mit Nullwerten beibehalten möchten, können wir ISNULL() verwenden um die Nullwerte durch einen anderen Wert zu ersetzen:

SELECT STRING_AGG(ISNULL(TaskCode, 'N/A'), ', ') AS Result 
FROM Tasks;

Ergebnis:

Result                                        
-------------------------------------
cat123, N/A, N/A, pnt456, rof789, N/A

Die COALESCE()-Funktion

Die ISNULL() funktioniert ähnlich wie COALESCE() Funktion. Wir könnten also den obigen Code durch diesen ersetzen:

SELECT STRING_AGG(COALESCE(TaskCode, 'N/A'), ', ') AS Result 
FROM Tasks;

Und bekomme das gleiche Ergebnis:

Result                                        
-------------------------------------
cat123, N/A, N/A, pnt456, rof789, N/A

Es gibt jedoch einige Unterschiede im Verhalten der beiden Funktionen. Weitere Informationen zu den Unterschieden finden Sie hier im Vergleich von COALESCE() und ISNULL() auf der Microsoft-Website.