NULLIF (Transact-SQL)
Изменения: 12 декабря 2006 г.
Возвращает значение NULL, если два указанных выражения эквивалентны.
Синтаксические обозначения в Transact-SQL
Синтаксис
NULLIF ( expression , expression )
Аргументы
expression
Любое допустимое скалярное выражение.Дополнительные сведения см. в разделе Выражения (Transact-SQL).
Типы возвращаемых данных
Возвращает значение того же типа, который имеет первого выражение expression.
Если выражения не эквивалентны, функция NULLIF возвращает первое указанное выражение expression. Если они эквивалентны, функция NULLIF возвращает значение NULL, имеющее тип, соответствующий типу первого выражения expression.
Замечания
NULLIF аналогичен функции CASE, в которой два выражения равны, а результирующее выражение равно NULL.
В функции NULLIF не рекомендуется использовать такие зависимые от времени функции, как RAND(). Это может приводить к тому, что функция будет вычисляться дважды с возвратом различных результатов для каждого из вызовов.
Примеры
А. Возвращение не изменившихся сумм бюджета
В следующем примере производится создание таблицы budgets
для отображения отдела (dept
), его текущего (current_year
) и предыдущего бюджета (previous_year
). Для текущего года для отдела, бюджет которого не изменился с предыдущего года, выводится значение NULL
, а значение 0
указывается для указания того, что бюджет еще не определен. Для получения среднего значения только для тех отделов, которым уже назначен бюджет и включения значения прошлогоднего бюджета (используется значение previous_year
, если current_year
равен NULL
), используются функции NULLIF
и COALESCE
.
USE AdventureWorks;
GO
IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'budgets')
DROP TABLE budgets;
GO
SET NOCOUNT ON;
CREATE TABLE budgets
(
dept tinyint IDENTITY,
current_year decimal NULL,
previous_year decimal NULL
);
INSERT budgets VALUES(100000, 150000);
INSERT budgets VALUES(NULL, 300000);
INSERT budgets VALUES(0, 100000);
INSERT budgets VALUES(NULL, 150000);
INSERT budgets VALUES(300000, 250000);
GO
SET NOCOUNT OFF;
SELECT AVG(NULLIF(COALESCE(current_year,
previous_year), 0.00)) AS 'Average Budget'
FROM budgets;
GO
Ниже приводится результирующий набор.
Average Budget
----------------------------------------
212500.000000
(1 row(s) affected)
Б. Сравнение функций NULLIF и CASE
Для демонстрации схожести функции NULLIF и инструкции CASE в следующих запросах вычисляется, равны ли значения столбцов MakeFlag
и FinishedGoodsFlag
. В первом запросе используется функция NULLIF
. Во втором — инструкция CASE
.
USE AdventureWorks;
GO
SELECT ProductID, MakeFlag, FinishedGoodsFlag,
NULLIF(MakeFlag,FinishedGoodsFlag)AS 'Null if Equal'
FROM Production.Product
WHERE ProductID < 10;
GO
SELECT ProductID, MakeFlag, FinishedGoodsFlag,'Null if Equal' =
CASE
WHEN MakeFlag = FinishedGoodsFlag THEN NULL
ELSE MakeFlag
END
FROM Production.Product
WHERE ProductID < 10;
GO
См. также
Справочник
CASE (Transact-SQL)
десятичные и числовые (Transact-SQL)
Системные функции (Transact-SQL)
Справка и поддержка
Получение помощи по SQL Server 2005
Журнал изменений
Версия | Журнал |
---|---|
12 декабря 2006 г. |
|
14 апреля 2006 г. |
|