SQL ISNULL() , NVL() , IFNULL() și COALESCE() Funcții
Uită - te la următorul "Products" tabel:
p_id | Numele produsului | Preț unitar | UnitsInStock | UnitsOnOrder |
---|---|---|---|---|
1 | Jarlsberg | 10.45 | 16 | 15 |
2 | mascarpone | 32.56 | 23 | |
3 | Gorgonzola | 15.67 | 9 | 20 |
Să presupunem că "UnitsOnOrder" coloana este opțională și poate conține valori NULL.
Avem următoarea declarație SELECT:
SELECT ProductName,UnitPrice*(UnitsInStock+UnitsOnOrder)
FROM Products
In exemplul de mai sus, în cazul în care oricare dintre "UnitsOnOrder" valorile sunt NULL, rezultatul este NULL.
Microsoft ISNULL() funcție este utilizată pentru a specifica modul în care dorim să tratăm valorile NULL.
NVL() , IFNULL() și COALESCE() funcții pot fi de asemenea folosite pentru a obține același rezultat.
În acest caz, dorim valori NULL să fie zero.
Mai jos, în cazul în care "UnitsOnOrder" este NULL nu va afecta calcul, deoarece ISNULL() returnează un zero în cazul în care valoarea este NULL:
MS Access
SELECT ProductName,UnitPrice*(UnitsInStock+IIF(ISNULL(UnitsOnOrder),0,UnitsOnOrder))
FROM Products
SQL Server
SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products
Oracle
Oracle nu are un ISNULL() funcție. Cu toate acestea, putem folosi NVL() funcția pentru a obține același rezultat:
SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))
FROM Products
MySQL
MySQL are un ISNULL() funcție. Cu toate acestea, funcționează un pic diferit de Microsoft ISNULL() funcție.
În MySQL putem folosi IFNULL() funcție, cum ar fi aceasta:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
sau putem folosi COALESCE() funcție, cum ar fi aceasta:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products