Wanneer u een query uitvoert op een SQL Server-database, kan het voorkomen dat u niet wilt dat null-waarden worden geretourneerd in uw resultatenset. En er kunnen momenten zijn waarop u ze wel wilt retourneren. Maar er kunnen ook momenten zijn waarop u ze wel wilt retourneren, maar met een andere waarde.
Dat is wat de ISNULL()
functie is voor.
ISNULL()
is een T-SQL-functie waarmee u NULL
. kunt vervangen met een opgegeven waarde naar keuze.
Voorbeeld
Hier is een basisquery die een kleine resultatenset retourneert:
SELECT TaskCode AS Result FROM Tasks;
Resultaat:
Result ------ cat123 null null pnt456 rof789 null
We kunnen zien dat er drie rijen zijn die null-waarden bevatten.
Als we niet willen dat de null-waarden als zodanig worden weergegeven, kunnen we ISNULL()
gebruiken om null
te vervangen met een andere waarde.
Zoals dit:
SELECT ISNULL(TaskCode, 'N/A') AS Result FROM Tasks;
Resultaat:
Result ------ cat123 N/A N/A pnt456 rof789 N/A
We kunnen het ook vervangen door de lege string:
SELECT ISNULL(TaskCode, '') AS Result FROM Tasks;
Resultaat:
Result ------ cat123 pnt456 rof789
Merk op dat ISNULL()
vereist dat het tweede argument van een type is dat impliciet kan worden geconverteerd naar het gegevenstype van het eerste argument. Dat komt omdat het het resultaat retourneert met behulp van het gegevenstype van het eerste argument.
Voorkomen dat null-rijen verdwijnen
Er zijn enkele T-SQL-functies waarbij null-waarden uit de resultatenset worden geëlimineerd. In dergelijke gevallen worden er helemaal geen null-waarden geretourneerd.
Hoewel dit in sommige gevallen een wenselijk resultaat kan zijn, kan het in andere gevallen rampzalig zijn, afhankelijk van wat u met de gegevens moet doen zodra deze zijn geretourneerd.
Een voorbeeld van zo'n functie is STRING_AGG()
. Met deze functie kunt u de resultatenset retourneren als een lijst met scheidingstekens. Het elimineert echter ook null-waarden uit de resultatenset. Dus als we deze functie gebruiken met de bovenstaande voorbeeldgegevens, krijgen we drie resultaten in plaats van zes:
SELECT STRING_AGG(TaskCode, ', ') AS Result FROM Tasks;
Resultaat:
Result ---------------------- cat123, pnt456, rof789
Dus de drie rijen met null-waarden worden niet geretourneerd.
In veel gevallen is dit een perfect resultaat, omdat onze resultatenset niet vol zit met null-waarden. Dit kan echter ook problemen veroorzaken, afhankelijk van waarvoor de gegevens worden gebruikt.
Daarom, als we de rijen met null-waarden willen behouden, kunnen we ISNULL()
gebruiken om de null-waarden te vervangen door een andere waarde:
SELECT STRING_AGG(ISNULL(TaskCode, 'N/A'), ', ') AS Result FROM Tasks;
Resultaat:
Result ------------------------------------- cat123, N/A, N/A, pnt456, rof789, N/A
De COALESCE()-functie
De ISNULL()
functie werkt op dezelfde manier als de COALESCE()
functie. Dus we zouden de bovenstaande code kunnen vervangen door dit:
SELECT STRING_AGG(COALESCE(TaskCode, 'N/A'), ', ') AS Result FROM Tasks;
En krijg hetzelfde resultaat:
Result ------------------------------------- cat123, N/A, N/A, pnt456, rof789, N/A
Er zijn echter enkele verschillen in de manier waarop de twee functies zich gedragen. Voor meer informatie over de verschillen, hier is een vergelijking van COALESCE()
en ISNULL()
op de Microsoft-website.