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:

Eintrag
0.0
1.0
2.0
Null

Die folgende Liste zeigt die verschiedenen Rückgabewerte

AggregatErgebnisHinweise
Count(*)4Count(*) zählt immer alle Zeilen
Count(Eintrag)3Count(<Spaltenname>) zählt nur die Zeilen <> Null
Count(IsNull(Eintrag, 0))4Die 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


Kontaktformular:

Schreiben Sie mir und wir bauen gemeinsam Ihre neue Web-Datenbank!

Die Erläuterungen zum Datenschutz habe ich gelesen und stimme diesen zu.

© 2003-2019 Jürgen Auer, Berlin.