Функция ISNULL (Transact-SQL)
Заменяет значение NULL указанным замещающим значением.
Применимо для следующих объектов: SQL Server (SQL Server 2008 по текущую версию), База данных SQL Windows Azure (С первоначального выпуска по текущий выпуск). |
Cинтаксические обозначения в Transact-SQL
Синтаксис
ISNULL ( check_expression , replacement_value )
Аргументы
check_expression
Выражение, которое необходимо проверить на равенство значению NULL. Значения check_expression могут быть любого типа.replacement_value
Выражение, возвращаемое, если check_expression равно NULL. Аргумент replacement_value должен иметь тип, который может быть неявно преобразован в тип check_expresssion.
Типы возвращаемых данных
Возвращает тот же тип, что и у аргумента check_expression. Если литерал NULL указывается в качестве check_expression, возвращает тип данных значения replacement_value. Если литерал NULL указывается в качестве check_expression и не указано никакого значения replacement_value, возвращает int.
Замечания
Значение аргумента check_expression возвращается в случае, если оно не равно NULL. В противном случае возвращается значение аргумента replacement_value, после того как это значение будет неявно преобразовано к типу значения аргумента check_expression, если типы различаются. replacement_value может быть усечено, если длина replacement_value превышает check_expression.
Примечание
Для возврата первого значения, отличного от NULL, используйте COALESCE (Transact-SQL).
Примеры
А.Использование функции ISNULL с функцией AVG
Следующий пример демонстрирует расчет среднего значения веса всех продуктов. Все записи со значением NULL в столбце Weight таблицы Product заменяются значением 50.
USE AdventureWorks2012;
GO
SELECT AVG(ISNULL(Weight, 50))
FROM Production.Product;
GO
Ниже приводится результирующий набор.
--------------------------
59.79
(1 row(s) affected)
Б.Использование функции ISNULL
Следующий пример производит выборку описания, процента скидки, минимального и максимального количества для всех специальных предложений из базы AdventureWorks2012. Если максимальное количество для отдельного специального предложения равно NULL, отображаемое значение MaxQty в результирующем наборе заменяется на 0.00.
USE AdventureWorks2012;
GO
SELECT Description, DiscountPct, MinQty, ISNULL(MaxQty, 0.00) AS 'Max Quantity'
FROM Sales.SpecialOffer;
GO
Ниже приводится результирующий набор.
Description DiscountPct MinQty Max Quantity
--------------- ------------- -------- ---------------
No Discount 0.00 0 0
Volume Discount 0.02 11 14
Volume Discount 0.05 15 4
Volume Discount 0.10 25 0
Volume Discount 0.15 41 0
Volume Discount 0.20 61 0
Mountain-100 Cl 0.35 0 0
Sport Helmet Di 0.10 0 0
Road-650 Overst 0.30 0 0
Mountain Tire S 0.50 0 0
Sport Helmet Di 0.15 0 0
LL Road Frame S 0.35 0 0
Touring-3000 Pr 0.15 0 0
Touring-1000 Pr 0.20 0 0
Half-Price Peda 0.50 0 0
Mountain-500 Si 0.40 0 0
(16 row(s) affected)
В.Проверка значений NULL в предложении WHERE
Не используйте для поиска значений NULL выражение ISNULL, вместо него следует использовать выражение IS NULL. В следующем примере выполняется поиск всех продуктов, имеющих значение NULL в столбце веса. Заметьте, что между словами IS и NULL стоит пробел.
USE AdventureWorks2012;
GO
SELECT Name, Weight
FROM Production.Product
WHERE Weight IS NULL;
GO
См. также
Справочник
Системные функции (Transact-SQL)