NULL-ek kezelése
A NULL érték azt jelenti, hogy nincs érték vagy ismeretlen. Ez nem jelenti azt, hogy nulla vagy üres, vagy akár egy üres sztring. Ezek az értékek nem ismeretlenek. Null érték használható olyan értékekhez, amelyek még nem lettek megadva, például ha egy ügyfél még nem adott meg e-mail-címet. Ahogy korábban már láthatta, egyes konverziós függvények null értéket is visszaadhatnak, ha egy érték nem kompatibilis a céladattípussal.
A NULL kezeléséhez gyakran speciális lépéseket kell tennie. A NULL valójában nem érték. Ismeretlen. Nem egyenlő semmivel, és semmivel sem egyenlő. A NULL nem nagyobb vagy kisebb, mint bármi. Nem tudunk semmit mondani arról, hogy mi az, de néha NULL értékekkel kell dolgoznunk. Szerencsére a T-SQL függvényeket biztosít a NULL értékek konvertálásához vagy cseréjéhez.
ISNULL (ellenőrzi, hogy egy érték null-e)
Az ISNULL függvény két argumentumot vesz fel. Az első egy olyan kifejezés, amelyet tesztelünk. Ha az első argumentum értéke NULL, a függvény a második argumentumot adja vissza. Ha az első kifejezés nem null, a függvény változatlanul adja vissza.
Tegyük fel például, hogy egy adatbázisban a Sales.Customer tábla tartalmaz egy MiddleName oszlopot, amely null értékeket engedélyez. A tábla lekérdezésekor ahelyett, hogy null értéket ad vissza az eredményben, dönthet úgy, hogy egy adott értéket ad vissza, például a "Nincs" értéket.
SELECT FirstName,
ISNULL(MiddleName, 'None') AS MiddleIfAny,
LastName
FROM Sales.Customer;
A lekérdezés eredményei a következőképpen nézhetnek ki:
Keresztnév
MiddleIfAny
Vezetéknév
Orlando
N.
Jé
Keith
Egyik sem
Howard
Donna
F.
Gonzales
...
...
...
Feljegyzés
A NULL helyére kerülő értéknek meg kell egyeznie a kiértékelt kifejezés adattípusával. A fenti példában a MiddleName egy varchar, így a helyettesítő érték nem lehet numerikus. Emellett olyan értéket kell választania, amely nem jelenik meg az adatokban normál értékként. Néha nehéz lehet olyan értéket találni, amely soha nem jelenik meg az adatokban.
Az előző példa egy NULL értéket kezelt a forrástáblában, de az ISNULL bármely olyan kifejezéssel használható, amely null értéket ad vissza, beleértve egy TRY_CONVERT függvény beágyazását egy ISNULL-függvénybe.
Egyesít
Az ISNULL függvény nem ANSI-szabvány, ezért érdemes lehet inkább a COALESCE függvényt használni. A COALESCE egy kicsit rugalmasabb, mivel változó számú argumentumot vehet fel, amelyek mindegyike kifejezés. A lista első olyan kifejezését adja vissza, amely nem NULL.
Ha csak két argumentum létezik, a COALESCE az ISNULL-hez hasonlóan viselkedik. Két argumentumnál több argumentum esetén azonban a COALESCE az ISNULL-t használó többrészes CASE-kifejezés alternatívaként is használható.
Ha minden argumentum NULL, akkor a COALESCE null értéket ad vissza. Minden kifejezésnek ugyanazokat a vagy kompatibilis adattípusokat kell visszaadnia.
A szintaxis a következő:
SELECT COALESCE ( expression1, expression2, [ ,...n ] )
Az alábbi példa egy HR nevű fiktív táblát használ. A bérek, amelyek három oszlopot tartalmaznak, amelyek az alkalmazottak heti keresetével kapcsolatos információkat tartalmazzák: az óradíj, a heti fizetés és az eladott egységenkénti jutalék. Az alkalmazott azonban csak egy típusú fizetést kap. Minden alkalmazott esetében a három oszlop egyikének értéke null, a másik kettő null értékű lesz. Az egyes alkalmazottaknak fizetett teljes összeg meghatározásához a COALESCE használatával csak a három oszlopban található nem null értéket adja vissza.
SELECT EmployeeID,
COALESCE(HourlyRate * 40,
WeeklySalary,
Commission * SalesQty) AS WeeklyEarnings
FROM HR.Wages;
Az eredmények a következőképpen nézhetnek ki:
Dolgozói azonosító
Heti kereset
0
899.76
2
1001.00
3
1298.77
...
...
NULLIF
A NULLIF függvény lehetővé teszi, hogy bizonyos feltételek mellett null értéket adjon vissza. Ez a függvény hasznos alkalmazásokkal rendelkezik olyan területeken, mint az adattisztítás, ha üres vagy helyőrző karaktereket szeretne null értékre cserélni.
A NULLIF két argumentumot vesz fel, és null értéket ad vissza, ha azok egyenértékűek. Ha nem egyenlők, a NULLIF az első argumentumot adja vissza.
Ebben a példában a NULLIF a 0-s kedvezményt null értékűre cseréli. A kedvezmény értékét adja vissza, ha nem 0:
SELECT SalesOrderID,
ProductID,
UnitPrice,
NULLIF(UnitPriceDiscount, 0) AS Discount
FROM Sales.SalesOrderDetail;
Az eredmények a következőképpen nézhetnek ki:
Értékesítési Rendelés Azonosító
Termékazonosító
Egységár
Árengedmény
71774
836
356.898
NULLA
71780
988
112.998
0,4
71781
748
818.7
NULLA
71781
985
112.998
0,4
...
...
...
...