sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man ersätter NULL med ett annat värde i SQL Server – ISNULL()

När du frågar efter en SQL Server-databas kan det finnas tillfällen då du inte vill att null-värden ska returneras i din resultatuppsättning. Och det kan finnas tillfällen då du vill ha dem tillbaka. Men det kan också finnas tillfällen då du vill ha dem tillbaka, men som ett annat värde.

Det är vad ISNULL() funktionen är för.

ISNULL() är en T-SQL-funktion som låter dig ersätta NULL med ett angivet värde som du väljer.

Exempel

Här är en grundläggande fråga som returnerar en liten resultatuppsättning:

SELECT TaskCode AS Result
FROM Tasks;

Resultat:

Result
------
cat123
null  
null  
pnt456
rof789
null  

Vi kan se att det finns tre rader som innehåller nollvärden.

Om vi ​​inte vill att null-värdena ska visas som sådana kan vi använda ISNULL() för att ersätta null med ett annat värde.

Så här:

SELECT ISNULL(TaskCode, 'N/A') AS Result 
FROM Tasks;

Resultat:

Result
------
cat123
N/A   
N/A   
pnt456
rof789
N/A   

Vi kan också ersätta den med den tomma strängen:

SELECT ISNULL(TaskCode, '') AS Result 
FROM Tasks;

Resultat:

Result
------
cat123
      
      
pnt456
rof789
        

Observera att ISNULL() kräver att det andra argumentet är av en typ som implicit kan konverteras till datatypen för det första argumentet. Det beror på att det returnerar resultatet med hjälp av datatypen för det första argumentet.

Förhindra nullrader från att försvinna

Det finns vissa T-SQL-funktioner där nollvärden elimineras från resultatuppsättningen. I sådana fall kommer null-värden inte att returneras alls.

Även om detta kan vara ett önskvärt resultat i vissa fall, kan det i andra fall vara katastrofalt, beroende på vad du behöver göra med informationen när den väl har returnerats.

Ett exempel på en sådan funktion är STRING_AGG() . Denna funktion låter dig returnera resultatuppsättningen som en avgränsad lista. Men det eliminerar också nollvärden från resultatuppsättningen. Så om vi använder den här funktionen med ovanstående exempeldata, skulle vi sluta med tre resultat istället för sex:

SELECT STRING_AGG(TaskCode, ', ') AS Result 
FROM Tasks;

Resultat:

Result                
----------------------
cat123, pnt456, rof789

Så de tre raderna som innehåller null-värden returneras inte.

I många fall är detta ett perfekt resultat, eftersom vår resultatuppsättning inte är belamrad med nollvärden. Detta kan dock också orsaka problem, beroende på vad data ska användas till.

Därför, om vi vill behålla raderna med nollvärden, kan vi använda ISNULL() för att ersätta null-värdena med ett annat värde:

SELECT STRING_AGG(ISNULL(TaskCode, 'N/A'), ', ') AS Result 
FROM Tasks;

Resultat:

Result                                        
-------------------------------------
cat123, N/A, N/A, pnt456, rof789, N/A

COALESCE()-funktionen

ISNULL() funktionen fungerar på liknande sätt som COALESCE() fungera. Så vi kan ersätta ovanstående kod med denna:

SELECT STRING_AGG(COALESCE(TaskCode, 'N/A'), ', ') AS Result 
FROM Tasks;

Och få samma resultat:

Result                                        
-------------------------------------
cat123, N/A, N/A, pnt456, rof789, N/A

Det finns dock vissa skillnader i hur de två funktionerna beter sig. För mer information om skillnaderna, här är en jämförelse av COALESCE() och ISNULL() på Microsofts webbplats.


  1. Backup Best Practices för MySQL, MariaDB och Galera Cluster

  2. Vad är skillnaden mellan varchar och nvarchar?

  3. Hur kan jag VÄLJA rader med MAX(kolumnvärde), PARTITION efter en annan kolumn i MYSQL?

  4. MySQL - hur man front pad postnummer med 0?