Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к: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)