sql >> Database >  >> RDS >> Sqlserver

NULL vervangen door een andere waarde in SQL Server - ISNULL()

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.


  1. Hoe MapReduce werkt in Hadoop

  2. Hoe age() werkt in PostgreSQL

  3. het uitvoeren van datetime-gerelateerde bewerkingen in PHP

  4. Configuratieparameter work_mem in PostgreSQL op Linux