IsNull
Diese Funktion prüft, ob der erste Ausdruck Null ist. Falls nein, wird der erste Ausdruck zurückgegeben, falls
ja, wird der zweite Ausdruck ausgewertet. Beide Ausdrücke müssen vom gleichen Datentyp sein.
Syntax
IsNull (<zu prüfender Ausdruck>, <Ersatzausdruck>)
Parameterliste
- <zu prüfender Ausdruck>
- Ausdruck, bei welchem geprüft wird, ob er gleich Null ist
- <Ersatzausdruck>
- Ausdruck, der zurückgegeben wird, falls der erste Ausdruck Null darstellt
- Rückgabewert
- entweder <zu prüfender Ausdruck> oder <Ersatzausdruck>
- Typ
- sonstige Funktion
Beispiele
Die Funktion kann zum einen dafür verwendet werden, die Null-Behandlung zu vereinfachen. Man denke an eine Haupttabelle
<Personen> und an eine Randtabelle <Personentitel> (Dr., Dr.med. usw.). Die Haupttabelle ist über einen
Left Join mit der Randtabelle verknüpft, da es Personen ohne Titel gibt. Soll als Text
<optionaler Titel plus Leerzeichen> <Personenname> ausgegeben werden, so erzeugt die direkte Verknüpfung
B.Titel + ' ' + A.Personenname
Null für alle Personen ohne Titel, da jede Verknüpfung mit Null selbst zu Null ausgewertet wird. Eine Abhilfe schafft hier die
IsNull-Funktion:
IsNull(B.Titel + ' ', '') + A.Personenname
Ist B.Titel Null, so auch B.Titel + ' ', also wird nur ein Leerstring eingefügt, ansonsten wird die gewünschte Darstellung erzeugt.
Eine zweite Verwendungsmöglichkeit besteht darin, bei der Nutzung von Aggregatfunktionen mit der IsNull-Funktion Standardwerte
für jene Zellen einzufügen, die leer sind. Aggregatfunktionen ignorieren üblicherweise Null-Werte.
Man betrachte die folgende
Tabelle:
Die folgende Liste zeigt die verschiedenen Rückgabewerte
| Aggregat | Ergebnis | Hinweise |
|---|
| Count(*) | 4 | Count(*) zählt immer alle Zeilen |
| Count(Eintrag) | 3 | Count(<Spaltenname>) zählt nur die Zeilen <> Null |
| Count(IsNull(Eintrag, 0)) | 4 | Die Zelle = Null wird mit 0.0 belegt und mitgezählt |
| Sum(Eintrag) | 3.0 | = 0.0 + 1.0 + 2.0 |
| Sum(IsNull(Eintrag, 0)) | 3.0 | = 0.0 + 1.0 + 2.0 + 0.0 |
| Avg(Eintrag) | 1.0 | = (0.0 + 1.0 + 2.0) / 3 |
| Avg(IsNull(Eintrag, 0)) | 0.7500 | = (0.0 + 1.0 + 2.0 + 0.0) / 4 |
Falls ein Standardwert inhaltlich sinnvoll ist, kann er auf diese Weise ad hoc eingefügt werden, ohne daß die Grunddaten
per Update-Befehl verändert werden müssen. Bei einer Aggregatfunktion, welche auf die Zahl der gefundenen Zeilen bezug nimmt (Avg (Mittelwert) = Summe / Anzahl der Zeilen)
verändert sich das Ergebnis. Werden bsp. Artikel ohne Preisauszeichnung mit dieser Technik auf einen Preis von 0.0 gesetzt,
so verringert sich nun der Durchschnittspreis. In solchen Fällen ist die direkte Auswertung mit Avg(<Spalte>), welche
die Nullwerte sowohl beim Addieren der Werte als auch bei der Berechnung der Anzahl der ausgewerteten Zeilen ignoriert, sinnvoller.
Hinweise
Der Name dieser Funktion ist etwas mißverständlich. Angesichts der
IsDate- und der
IsNumeric-Funktionen
könnte erwartet werden, daß sie 1 bzw. 0 zurückliefert, falls der (einzige) Parameter Null ist. Sie liefert jedoch nicht
0/1, sondern entweder den ersten oder den zweiten Parameter zurück.
Die Funktion ist eine verkürzte Version der
Case-Verzweigung und könnte durch den folgenden Ausdruck
ersetzt werden:
Case
When <zu prüfender Ausdruck> Is Null Then <Ersatzausdruck
Else <zu prüfender Ausdruck>
End © 2003-2009 Jürgen Auer, Berlin.