SQL ISNULL() , NVL() , IFNULL() i COALESCE() Funkcje
Spójrz na poniższy "Products" tabeli:
p_id | Nazwa produktu | CenaJednostkowa | UnitsInStock | UnitsonOrder |
---|---|---|---|---|
1 | Jarlsberg | 10,45 | 16 | 15 |
2 | Mascarpone | 32,56 | 23 | |
3 | Gorgonzola | 15,67 | 9 | 20 |
Załóżmy, że "UnitsOnOrder" kolumna jest opcjonalny i może zawierać wartości NULL.
Mamy następujące SELECT:
SELECT ProductName,UnitPrice*(UnitsInStock+UnitsOnOrder)
FROM Products
W powyższym przykładzie, jeśli któryś z "UnitsOnOrder" wartości są NULL, wynikiem jest NULL.
Microsoft ISNULL() Funkcja ta jest używana do określenia, jak chcemy traktować wartości NULL.
NVL() , IFNULL() i COALESCE() funkcje mogą być również stosowane w celu osiągnięcia tego samego efektu.
W tym przypadku chcemy wartości NULL jako zero.
Poniżej, w razie "UnitsOnOrder" jest NULL nie zaszkodzi obliczeń, ponieważ ISNULL() zwraca zero, jeśli wartość jest 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 nie ma ISNULL() funkcję. Jednak możemy użyć NVL() funkcji, aby osiągnąć ten sam rezultat:
SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))
FROM Products
MySQL
MySQL nie mają ISNULL() funkcję. Jednak to działa trochę inaczej od Microsoftu ISNULL() funkcji.
W MySQL możemy użyć IFNULL() funkcji, na przykład:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
lub możemy użyć COALESCE() funkcji, na przykład:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products