TOP

SQL NULL Функції

Функції SQL IFNULL(), ISNULL(), COALESCE(), та NVL()


Подивимомся на наступну таблицю "Products" ("Продукти"):

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

Припустимо, що стовпець "UnitsOnOrder" необов'язковий і може містити значення NULL.

Розглянемо наступну інструкцію SELECT:

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

У прикладі вище, якщо будь-яке зі значень "UnitsOnOrder" дорівнює NULL, результат буде NULL.

Рішення

MySQL

Функція MySQL IFNULL() дозволяє повертати альтернативне значення, якщо вираз дорівнює NULL:

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

або ми можемо використати функцію COALESCE(), наприклад:

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

SQL Server

Функція SQL Server ISNULL() дозволяє повертати альтернативне значення, якщо вираз має значення NULL:

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

або ми можемо використати функцію COALESCE(), наприклад:

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

MS Access

Функція MS Access IsNull() повертає TRUE (-1), якщо вираз має нульове значення, інакше FALSE (0):

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

Oracle

Функція Oracle NVL() досягає того самого результату:

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

або ми можемо використати функцію COALESCE(), наприклад:

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