NULL's verwerken

Voltooid

Een NULL-waarde betekent geen waarde of onbekend. Dit betekent niet nul of leeg, of zelfs geen lege tekenreeks. Deze waarden zijn niet onbekend. Een NULL-waarde kan worden gebruikt voor waarden die nog niet zijn opgegeven, bijvoorbeeld wanneer een klant nog geen e-mailadres heeft opgegeven. Zoals u eerder hebt gezien, kan een NULL-waarde ook worden geretourneerd door sommige conversiefuncties als een waarde niet compatibel is met het doelgegevenstype.

U moet vaak speciale stappen uitvoeren om null af te handelen. NULL is echt een niet-waarde. Het is onbekend. Het is niet gelijk aan iets en het is niet ongelijk aan iets. NULL is niet groter of kleiner dan iets. We kunnen niets zeggen over wat het is, maar soms moeten we werken met NULL-waarden. Gelukkig biedt T-SQL functies voor conversie of vervanging van NULL-waarden.

ISNULL

De functie ISNULL heeft twee argumenten. De eerste is een expressie die we testen. Als de waarde van dat eerste argument NULL is, retourneert de functie het tweede argument. Als de eerste expressie niet null is, wordt deze ongewijzigd geretourneerd.

Stel dat de tabel Sales.Customer in een database een kolom MiddleName bevat waarmee NULL-waarden zijn toegestaan. Wanneer u een query op deze tabel uitvoert in plaats van NULL in het resultaat te retourneren, kunt u ervoor kiezen om een specifieke waarde te retourneren, zoals 'Geen'.

SELECT FirstName,
      ISNULL(MiddleName, 'None') AS MiddleIfAny,
      LastName
FROM Sales.Customer;

De resultaten van deze query kunnen er ongeveer als volgt uitzien:

Voornaam

MiddleIfAny

Achternaam

Orlando

N.

Gee

Keith

Geen

Howard

Donna

F.

Gonzales

...

...

...

Notitie

De waarde die wordt vervangen door NULL, moet hetzelfde gegevenstype zijn als de expressie die wordt geëvalueerd. In het bovenstaande voorbeeld is MiddleName een varchar, dus de vervangende waarde kan niet numeriek zijn. Daarnaast moet u een waarde kiezen die niet in de gegevens wordt weergegeven als een normale waarde. Het kan soms lastig zijn om een waarde te vinden die nooit in uw gegevens wordt weergegeven.

In het vorige voorbeeld is een NULL-waarde in de brontabel verwerkt, maar u kunt ISNULL gebruiken met elke expressie die een NULL kan retourneren, inclusief het nesten van een TRY_CONVERT functie binnen een ISNULL-functie.

SAMENSMELTEN

De functie ISNULL is niet ANSI-standaard, dus u kunt in plaats daarvan de functie COALESCE gebruiken. COALESCE is iets flexibeler omdat het een variabel aantal argumenten kan aannemen, elk een expressie. Hiermee wordt de eerste expressie geretourneerd in de lijst die niet NULL is.

Als er slechts twee argumenten zijn, gedraagt COALESCE zich als ISNULL. Met meer dan twee argumenten kan COALESCE echter worden gebruikt als alternatief voor een multipart CASE-expressie met behulp van ISNULL.

Als alle argumenten NULL zijn, retourneert COALESCE NULL. Alle expressies moeten dezelfde of compatibele gegevenstypen retourneren.

De syntaxis is als volgt:

SELECT COALESCE ( expression1, expression2, [ ,...n ] )

In het volgende voorbeeld wordt een fictieve tabel met de naam HR gebruikt. Lonen, die drie kolommen bevatten met informatie over de wekelijkse inkomsten van de werknemers: het uurtarief, het wekelijkse salaris en een commissie per verkochte eenheid. Een werknemer ontvangt echter slechts één type betaling. Voor elke werknemer heeft een van deze drie kolommen een waarde, de andere twee zijn NULL. Als u het totale bedrag wilt bepalen dat aan elke werknemer is betaald, kunt u COALESCE gebruiken om alleen de niet-null-waarde in die drie kolommen te retourneren.

SELECT EmployeeID,
      COALESCE(HourlyRate * 40,
                WeeklySalary,
                Commission * SalesQty) AS WeeklyEarnings
FROM HR.Wages;

De resultaten kunnen er ongeveer als volgt uitzien:

Medewerker-ID

Wekelijkse informatie

1

899.76

2

1001.00

3

1298.77

...

...

NULLIF

Met de functie NULLIF kunt u NULL retourneren onder bepaalde voorwaarden. Deze functie heeft nuttige toepassingen in gebieden zoals het opschonen van gegevens, wanneer u lege tekens of tijdelijke aanduidingen wilt vervangen door NULL.

NULLIF heeft twee argumenten en retourneert NULL als ze gelijkwaardig zijn. Als ze niet gelijk zijn, retourneert NULLIF het eerste argument.

In dit voorbeeld vervangt NULLIF een korting van 0 door een NULL. Deze retourneert de kortingswaarde als deze niet 0 is:

SELECT SalesOrderID,
      ProductID,
      UnitPrice,
      NULLIF(UnitPriceDiscount, 0) AS Discount
FROM Sales.SalesOrderDetail;

De resultaten kunnen er ongeveer als volgt uitzien:

VerkooporderID

ProductID

Prijs per eenheid

Korting

71774

836

356.898

NUL

71780

988

112.998

0,4

71781

748

818.7

NUL

71781

985

112.998

0,4

...

...

...

...