NULL-osoitteiden käsitteleminen
NULL-arvo tarkoittaa , ettei arvoa ole tai se on tuntematon. Se ei tarkoita nollaa tai tyhjää tai edes tyhjää merkkijonoa. Näitä arvoja ei tunneta. NULL-arvoa voidaan käyttää arvoille, joita ei ole vielä annettu, esimerkiksi silloin, kun asiakas ei ole vielä antanut sähköpostiosoitetta. Kuten olet aiemmin nähnyt, jotkin muuntofunktiot voivat palauttaa myös NULL-arvon, jos arvo ei ole yhteensopiva kohdetietotyypin kanssa.
Joudut usein ryhtymään erityisiin toimiin NULL-arvon käsittelemiseksi. NULL on todella muu kuin arvo. Se on tuntematon. Se ei ole samanlaista kuin mikään, eikä se ole epätasa-arvoista mihinkään. NULL ei ole suurempi tai pienempi kuin mikään. Emme voi sanoa mitään siitä, mitä se on, mutta joskus meidän on työskenneltävä null-arvojen kanssa. T-SQL tarjoaa funktioita null-arvojen muuntamiseen tai korvaamiseen.
ISNULL
ISNULL-funktio vaatii kaksi argumenttia. Ensimmäinen on lauseke, jota testaamme. Jos ensimmäisen argumentin arvo on NULL, funktio palauttaa toisen argumentin. Jos ensimmäinen lauseke ei ole tyhjäarvo, se palautetaan muuttumattomana.
Oletetaan esimerkiksi, että tietokannan Sales.Customer-taulukko sisältää MiddleName-sarakkeen, joka sallii null-arvot . Kun suoritat kyselyjä tästä taulukosta sen sijaan, että palauttaisit tuloksessa NULL-arvon, voit halutessasi palauttaa tietyn arvon, kuten "Ei mitään".
SELECT FirstName,
ISNULL(MiddleName, 'None') AS MiddleIfAny,
LastName
FROM Sales.Customer;
Tämän kyselyn tulokset saattavat näyttää seuraavankaltaisilta:
Etunimi
MiddleIfAny
Sukunimi
Orlando
N.
Gee
Keith
Ei lainkaan
Howard
Donna
F.
Gonzales
...
...
...
Huomautus
NULL-arvolla korvatun arvon on oltava sama tietotyyppi kuin arvioitavan lausekkeen. Yllä olevassa esimerkissä MiddleName on varchar, joten korvaava arvo ei voi olla numeerinen. Lisäksi sinun on valittava arvo, jota ei näytetä tiedoissa tavallisena arvona. Joskus voi olla vaikeaa löytää arvo, jota ei koskaan näy tiedoissasi.
Edellisessä esimerkissä lähdetaulukossa käsiteltiin NULL-arvoa, mutta voit käyttää ISNULL-funktiota minkä tahansa lausekkeen kanssa, joka saattaa palauttaa tyhjäarvon, mukaan lukien TRY_CONVERT-funktion upotus ISNULL-funktioon.
YHDISTÄÄ
ISNULL-funktio ei ole ANSI-standardi, joten voit halutessasi käyttää sen sijaan COALESCE-funktiota. COALESCE on hieman joustavampi siinä mielessä, että se voi ottaa vaihtelevan määrän argumentteja, joista kukin on lauseke. Se palauttaa luettelon ensimmäisen lausekkeen, joka ei ole NULL.
Jos argumentteja on vain kaksi, COALESCE käyttäytyy kuin ISNULL. COALESCE-funktiota voidaan kuitenkin käyttää useamman kuin kahden argumentin kanssa vaihtoehtona moniosammalle CASE-lausekkeelle, jossa käytetään ISNULL-funktiota.
Jos kaikki argumentit ovat NULL-arvoja, COALESCE palauttaa TYHJÄARVON. Kaikkien lausekkeiden on palautettava samat tai yhteensopivat tietotyypit.
Syntaksi on seuraava:
SELECT COALESCE ( expression1, expression2, [ ,...n ] )
Seuraavassa esimerkissä käytetään kuvitteellista taulukkoa nimeltä HR. Palkka, johon sisältyy kolme saraketta, jotka sisältävät tietoa työntekijöiden viikoittaisista ansioista: tuntipalkka, viikkopalkka ja myytyä yksikköä kohden. Työntekijä saa kuitenkin vain yhden palkkatyypin. Jokaiselle työntekijälle yhdellä näistä kolmesta sarakkeesta on arvo, ja toisella on arvo NULL. Voit määrittää kullekin työntekijälle maksetun kokonaissumman käyttämällä COALESCE-funktiota palauttamaan vain kolmesta sarakkeesta löytyneen muun kuin tyhjäarvon.
SELECT EmployeeID,
COALESCE(HourlyRate * 40,
WeeklySalary,
Commission * SalesQty) AS WeeklyEarnings
FROM HR.Wages;
Tulokset saattavat näyttää suunnilleen tämänkaltaisilta:
Työntekijän tunnus
WeeklyEarnings
1
899.76
2
1001.00
3
1298.77
...
...
NULLIF
NULLIF-funktion avulla voit palauttaa NULL-arvon tietyillä ehdoilla. Tällä funktiolla on hyödyllisiä sovelluksia esimerkiksi tietojen puhdistuksen aloilla, kun haluat korvata tyhjäarvoiset tai paikkamerkkimerkit arvolla NULL.
NULLIF ottaa kaksi argumenttia ja palauttaa tyhjäarvon, jos ne ovat samanarvoisia. Jos ne eivät ole yhtä suuret, NULLIF palauttaa ensimmäisen argumentin.
Tässä esimerkissä NULLIF korvaa 0-alennuksen arvolla NULL. Se palauttaa alennusarvon, jos se ei ole 0:
SELECT SalesOrderID,
ProductID,
UnitPrice,
NULLIF(UnitPriceDiscount, 0) AS Discount
FROM Sales.SalesOrderDetail;
Tulokset saattavat näyttää suunnilleen tämänkaltaisilta:
SalesOrderID
Productid
UnitPrice
Alennus
71774
836
356.898
NOLLA
71780
988
112.998
0.4
71781
748
818.7
NOLLA
71781
985
112.998
0.4
...
...
...
...