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.