Функция 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)

IS [NOT] NULL (Transact-SQL)

Системные функции (Transact-SQL)

Предложение WHERE (Transact-SQL)

COALESCE (Transact-SQL)