ВВЕРХ

SQL NULL Функции

Функции SQL IFNULL(), ISNULL(), COALESCE() и NVL()


Посмотрим следующую таблицу «Продукты»:

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