sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan erstattes NULL med en anden værdi i SQL Server – ISNULL()

Når du forespørger i en SQL Server-database, kan der være tidspunkter, hvor du ikke ønsker, at null-værdier skal returneres i dit resultatsæt. Og der kan være tidspunkter, hvor du vil have dem tilbage. Men der kan også være tidspunkter, hvor du vil have dem returneret, men som en anden værdi.

Det er hvad ISNULL() funktion er til.

ISNULL() er en T-SQL-funktion, der giver dig mulighed for at erstatte NULL med en specificeret værdi efter eget valg.

Eksempel

Her er en grundlæggende forespørgsel, der returnerer et lille resultatsæt:

SELECT TaskCode AS Result
FROM Tasks;

Resultat:

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

Vi kan se, at der er tre rækker, der indeholder nulværdier.

Hvis vi ikke ønskede, at null-værdierne skulle fremstå som sådan, kunne vi bruge ISNULL() for at erstatte null med en anden værdi.

Sådan:

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

Resultat:

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

Vi kunne også erstatte den med den tomme streng:

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

Resultat:

Result
------
cat123
      
      
pnt456
rof789
        

Bemærk at ISNULL() kræver, at det andet argument er af en type, der implicit kan konverteres til datatypen for det første argument. Det er fordi det returnerer resultatet ved hjælp af datatypen for det første argument.

Forhindrer  Null Rows i at forsvinde

Der er nogle T-SQL-funktioner, hvor nulværdier er elimineret fra resultatsættet. I sådanne tilfælde returneres null-værdier slet ikke.

Selvom dette kan være et ønskeligt resultat i nogle tilfælde, kan det i andre tilfælde være katastrofalt, afhængigt af hvad du skal gøre med dataene, når de er returneret.

Et eksempel på en sådan funktion er STRING_AGG() . Denne funktion giver dig mulighed for at returnere resultatsættet som en afgrænset liste. Det eliminerer dog også nulværdier fra resultatsættet. Så hvis vi bruger denne funktion med ovenstående eksempeldata, ville vi ende med tre resultater i stedet for seks:

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

Resultat:

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

Så de tre rækker, der indeholder nul-værdier, returneres ikke.

I mange tilfælde er dette et perfekt resultat, da vores resultatsæt ikke er rodet med nulværdier. Dette kan dog også forårsage problemer, afhængigt af hvad dataene skal bruges til.

Derfor, hvis vi ønsker at beholde rækkerne med null-værdier, kan vi bruge ISNULL() for at erstatte null-værdierne med en anden værdi:

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 fungerer på samme måde som COALESCE() fungere. Så vi kunne erstatte ovenstående kode med denne:

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

Og få det samme resultat:

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

Der er dog nogle forskelle i den måde, de to funktioner opfører sig på. For mere information om forskellene, her er en sammenligning af COALESCE() og ISNULL() på Microsofts websted.


  1. Ydeevne overraskelser og antagelser:DATEDIFF

  2. MySQL enkelt citater, dobbelte citater, tilbage citater Brug forklaret

  3. hvordan udføres et .sql-script på heroku?

  4. SQL WHERE-erklæring