Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к:SQL Server
База данных Azure SQL
Управляемый экземпляр Azure SQL
Azure Synapse Analytics
Система платформы аналитики (PDW)
Конечная точка SQL аналитики в Microsoft Fabric
Хранилище в Microsoft Fabric
База данных SQL в Microsoft Fabric
Возвращает значение NULL, если два указанных выражения равны. Например, SELECT NULLIF(4,4) AS Same, NULLIF(5,7) AS Different; возвращает значение NULL для первого столбца (4 и 4), так как два входных значения одинаковы. Для второго столбца возвращается первое значение (5), так как два входных значения различаются.
Соглашения о синтаксисе Transact-SQL
Syntax
NULLIF ( expression , expression )
Arguments
expression
Любое допустимое скалярное выражение.
Типы возвращаемых данных
Возвращает значение того же типа, что и у первого выражения expression.
Если выражения не равны, функция NULLIF возвращает первое выражение expression. Если они равны, функция NULLIF возвращает значение NULL с типом, соответствующим типу первого выражения expression.
Remarks
Функция NULLIF аналогична поисковому выражению CASE, в котором два выражения равны, а результирующее выражение равно NULL.
В функции NULLIF не рекомендуется использовать такие зависимые от времени функции, как RAND(). Это может приводить к тому, что функция будет вычисляться дважды с возвратом различных результатов для каждого из вызовов.
Examples
A. Возвращение неизменившихся сумм бюджета
В следующем примере производится создание таблицы budgets для отображения отдела (dept), его текущего (current_year) и предыдущего бюджета (previous_year). Для текущего года для отдела, бюджет которого не изменился с предыдущего года, выводится значение NULL, а значение 0 указывается для указания того, что бюджет еще не определен. Для получения среднего значения только для тех отделов, которым уже назначен бюджет и включения значения прошлогоднего бюджета (используется значение previous_year, если current_year равен NULL), используются функции NULLIF и COALESCE.
CREATE TABLE dbo.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)
B. Сравнение функции NULLIF и выражения CASE
Для демонстрации схожести функции NULLIF и выражения CASE в следующих запросах вычисляется, равны ли значения столбцов MakeFlag и FinishedGoodsFlag. В первом запросе используется функция NULLIF. Во втором — выражение CASE.
USE AdventureWorks2022;
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
В. Возвращение сумм бюджета, не содержащих данных
В примере ниже создается таблица budgets, загружаются данные, а затем с помощью NULLIF возвращается значение NULL, если current_year равно NULL или содержит те же данные, что и previous_year.
Copy
CREATE TABLE budgets (
dept TINYINT,
current_year DECIMAL(10,2),
previous_year DECIMAL(10,2)
);
INSERT INTO budgets VALUES(1, 100000, 150000);
INSERT INTO budgets VALUES(2, NULL, 300000);
INSERT INTO budgets VALUES(3, 0, 100000);
INSERT INTO budgets VALUES(4, NULL, 150000);
INSERT INTO budgets VALUES(5, 300000, 300000);
SELECT dept, NULLIF(current_year,
previous_year) AS LastBudget
FROM budgets;
Вот результирующий набор.
dept LastBudget
---- -----------
1 100000.00
2 null
3 0.00
4 null
5 null
См. также
СЛУЧАЙ (Transact-SQL)
десятичная и числовая (Transact-SQL)
Системные функции (Transact-SQL)