SQL - ISNULL() , NVL() , IFNULL() и COALESCE() Функции
Посмотрите на следующую "Products" таблицы:
p_id | Наименование товара | Цена за единицу | UnitsInStock | UnitsOnOrder |
---|---|---|---|---|
1 | Jarlsberg | 10.45 | 16 | 15 |
2 | Маскарпоне | 32.56 | 23 | |
3 | горгонзола | 15.67 | 9 | 20 |
Предположим , что "UnitsOnOrder" столбец не является обязательным, и может содержать значения NULL.
Мы имеем следующую ЗЕЬЕСТ:
SELECT ProductName,UnitPrice*(UnitsInStock+UnitsOnOrder)
FROM Products
В приведенном выше примере, если какой - либо из "UnitsOnOrder" значений являются NULL, то результат будет NULL.
От Microsoft ISNULL() функция используется , чтобы определить , как мы хотим , чтобы обработать NULL значения.
NVL() , IFNULL() , и COALESCE() функции также могут быть использованы для достижения такого же результата.
В этом случае мы хотим, чтобы NULL значения равным нулю.
Ниже, если "UnitsOnOrder" является NULL это не повредит расчет, так как ISNULL() возвращает ноль , если значение 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 не имеет ISNULL() функцию. Тем не менее, мы можем использовать NVL() функцию , чтобы достичь того же результата:
SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))
FROM Products
MySQL
MySQL действительно имеет ISNULL() функцию. Тем не менее, он работает немного отличную от компании Microsoft ISNULL() функции.
В MySQL мы можем использовать IFNULL() функцию, например:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
или мы можем использовать COALESCE() функцию, например:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products