TOP

Funkcje SQL NULL

Funkcje SQL IFNULL(), ISNULL(), COALESCE() i NVL()


Spójrzmy na poniższą tabelę „Products” („Produkty”):

ProductIDProductNameSupplierIDCategoryIDUnitPrice
1Chais1110 boxes x 20 bags18.00
2Chang1124 - 12 oz bottles19.00
3Aniseed Syrup1212 - 550 ml bottles10.00
4Chef Anton's Cajun Seasoning2248 - 6 oz jars22.00
5Chef Anton's Gumbo Mix2236 boxes21.35

Załóżmy, że kolumna „UnitsOnOrder” jest opcjonalna i może zawierać wartość NULL.

Rozważ następującą instrukcję SELECT:

SELECT ProductName, UnitPrice * (UnitsInStock + UnitsOnOrder)
FROM Products

W powyższym przykładzie, jeśli którakolwiek z wartości „UnitsOnOrder” jest równa NULL, wynikiem będzie NULL.

Decyzja

MySQL

Funkcja MySQL IFNULL() umożliwia zwrócenie wartości alternatywnej, jeśli wyrażenie jest równe NULL:

SELECT ProductName, UnitPrice * (UnitsInStock + IFNULL(UnitsOnOrder, 0))
FROM Products

lub możemy użyć funkcji COALESCE(), na przykład:

SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products

Serwer SQL

Funkcja SQL Server ISNULL() umożliwia zwrócenie wartości alternatywnej, jeśli wyrażenie ma wartość NULL:

SELECT ProductName, UnitPrice * (UnitsInStock + ISNULL(UnitsOnOrder, 0))
FROM Products

lub możemy użyć funkcji COALESCE(), na przykład:

SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products

MS Access

Funkcja MS Access IsNull() zwraca TRUE (-1), jeśli wyrażenie ma wartość null, w przeciwnym razie FALSE (0):

SELECT ProductName, UnitPrice * (UnitsInStock + IIF(IsNull(UnitsOnOrder), 0, UnitsOnOrder))
FROM Products

Oracle

Funkcja Oracle NVL() pozwala uzyskać ten sam wynik:

SELECT ProductName, UnitPrice * (UnitsInStock + NVL(UnitsOnOrder, 0))
FROM Products

lub możemy użyć funkcji COALESCE(), na przykład:

SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products