„NULL“-Werte behandeln
Ein „NULL“-Wert bedeutet kein Wert oder unbekannt. Es bedeutet nicht „null“ oder „leer“ oder sogar eine leere Zeichenfolge. Diese Werte sind nicht unbekannt. Ein „NULL“-Wert kann für Werte verwendet werden, die noch nicht angegeben wurden, beispielsweise wenn ein Kunde noch keine E-Mail-Adresse angegeben hat. Wie Sie zuvor gesehen haben, kann ein „NULL“-Wert auch von einigen Konvertierungsfunktionen zurückgegeben werden, wenn ein Wert mit dem Zieldatentyp nicht kompatibel ist.
Sie müssen oft spezielle Schritte ausführen, um mit „NULL“ arbeiten zu können. „NULL“ ist tatsächlich ein Nichtwert. Er ist unbekannt. Er ist weder „gleich etwas“ noch „ungleich etwas“. „NULL“ ist nicht größer oder kleiner als etwas. Wir können nichts darüber sagen, was er ist, aber manchmal müssen wir mit „NULL“-Werten arbeiten. Glücklicherweise stellt T-SQL Funktionen für die Konvertierung oder Ersetzung von „NULL“-Werten zur Verfügung.
ISNULL
Die Funktion „ISNULL“ verwendet zwei Argumente. Das erste ist ein Ausdruck, den wir gerade testen. Wenn der Wert dieses ersten Arguments „NULL“ ist, gibt die Funktion das zweite Argument zurück. Wenn der erste Ausdruck nicht „NULL“ ist, wird er unverändert zurückgegeben.
Angenommen beispielsweise, die Tabelle Sales.Customer in einer Datenbank enthält die Spalte MiddleName, die „NULL“-Werte zulässt. Wenn Sie diese Tabelle abfragen, statt dass im Ergebnis „NULL“ zurückgegeben wird, können Sie wahlweise einen bestimmten Wert zurückgeben lassen, z. B. „None“.
SELECT FirstName,
ISNULL(MiddleName, 'None') AS MiddleIfAny,
LastName
FROM Sales.Customer;
Die Ergebnisse dieser Abfrage könnten ungefähr so aussehen:
FirstName
MiddleIfAny
LastName
Orlando
N.
Gee
Keith
Keine
Howard
Donna
F.
Gonzales
...
...
...
Hinweis
Der durch „NULL“ ersetzte Wert muss denselben Datentyp wie der gerade ausgewertete Ausdruck haben. Weil im vorstehenden Beispiel MiddleName ein varchar-Wert ist, konnte der Ersatzwert nicht numerisch sein. Außerdem müssen Sie einen Wert auswählen, der in den Daten nicht als regulärer Wert angezeigt wird. Manchmal kann es schwierig sein, einen Wert zu finden, der in Ihren Daten nie angezeigt wird.
Im vorherigen Beispiel wurde ein „NULL“-Wert in der Quelltabelle verarbeitet. Sie können aber „ISNULL“ bei jedem Ausdruck verwenden, der „NULL“ zurückgeben könnte, einschließlich der Schachtelung einer „TRY_CONVERT“-Funktion innerhalb einer „ISNULL“-Funktion.
COALESCE
Weil die Funktion „ISNULL“ kein ANSI-Standard ist, möchten Sie vielleicht stattdessen die Funktion „COALESCE“ verwenden. „COALESCE“ ist etwas flexibler, da eine variable Anzahl von Argumenten verwendet werden kann, von denen jedes ein Ausdruck ist. Diese Funktion gibt den ersten Ausdruck in der Liste zurück, der nicht „NULL“ ist.
Wenn es nur zwei Argumente gibt, verhält sich „COALESCE“ wie „ISNULL“. Bei mehr als zwei Argumenten kann „COALESCE“ jedoch als Alternative zu einem mehrteiligen „CASE“-Ausdruck mit „ISNULL“ verwendet werden.
Sind alle Argumente NULL, gibt COALESCE NULL zurück. Alle Ausdrücke müssen denselben Datentyp oder kompatible Datentypen zurückgeben.
Die Syntax ist wie folgt:
SELECT COALESCE ( expression1, expression2, [ ,...n ] )
Im folgenden Beispiel wird die fiktive Tabelle HR.Wages verwendet. Sie enthält drei Spalten mit Informationen zum Wochenverdienst der Mitarbeiter: den Stundensatz, das wöchentliche Gehalt und eine Provision pro verkaufter Einheit. Allerdings wird ein Angestellter nur nach einem dieser Gehaltstypen bezahlt. Für jeden Mitarbeiter enthält eine dieser drei Spalten einen Wert; die anderen beiden Spalten sind „NULL“. Zur Ermittlung des Gesamtbetrags, der an jeden Mitarbeiter gezahlt wird, können Sie mithilfe von „COALESCE“ nur den Wert ungleich „NULL“ zurückgeben lassen, der in diesen drei Spalten gefunden wurde.
SELECT EmployeeID,
COALESCE(HourlyRate * 40,
WeeklySalary,
Commission * SalesQty) AS WeeklyEarnings
FROM HR.Wages;
Die Ergebnisse könnten ungefähr so aussehen:
EmployeeID
WeeklyEarnings
1
899,76
2
1.001,00
3
1.298,77
...
...
NULLIF
Mithilfe der Funktion „NULLIF“ können Sie unter bestimmten Bedingungen „NULL“ zurückgeben. Diese Funktion bietet nützliche Anwendungen in Bereichen wie der Datenbereinigung, wenn Sie Leerzeichen oder Platzhalterzeichen durch „NULL“ ersetzen möchten.
„NULLIF“ verwendet zwei Argumente und gibt „NULL“ zurück, wenn sie gleichwertig sind. Wenn sie nicht gleichwertig sind, gibt „NULLIF“ das erste Argument zurück.
In diesem Beispiel ersetzt „NULLIF“ einen Rabatt (Discount) von „0“ durch einen „NULL“-Wert. Der Rabattwert wird zurückgegeben, wenn er nicht „0“ ist:
SELECT SalesOrderID,
ProductID,
UnitPrice,
NULLIF(UnitPriceDiscount, 0) AS Discount
FROM Sales.SalesOrderDetail;
Die Ergebnisse könnten ungefähr so aussehen:
Verkaufsbestellnr
ProductID
UnitPrice
Discount
71774
836
356,898
NULL
71780
988
112,998
0,4
71781
748
818,7
NULL
71781
985
112,998
0,4
...
...
...
...