В SQL Server, IIF()
функция (да не се бърка с IF
изявление) е условна функция, която връща втория или третия аргумент въз основа на оценката на първия аргумент.
Това е съкратен начин за писане на CASE
изразяване. Логически е еквивалентно на CASE WHEN X THEN Y ELSE Z END
приемайки IIF(X, Y, Z)
.
IIF()
е съкращение от Незабавен IF .
Синтаксис
Синтаксисът е така:
IIF ( boolean_expression, true_value, false_value )
Къде:
- булев_израз е изразът, който трябва да се оцени.
- истинска_стойност се връща, ако boolean_expression е вярно.
- фалшива_стойност се връща, ако boolean_expression е невярно или неизвестно.
Както при CASE
изрази, IIF()
операторите могат да бъдат вложени само до максимално ниво от 10.
Пример
Ето основен пример, за да демонстрирате как IIF()
работи.
SELECT IIF( 1 < 2, 'True', 'False' );
Резултат:
True
В този случай изразът за оценка е 1 < 2
. Вярно е, че 1 е по-малко от 2, така че вторият аргумент беше върнат.
Това е еквивалентно на следното.
SELECT
CASE WHEN 1 < 2 THEN 'True'
ELSE 'False'
END;
Резултат:
True
В тези примери използвах думите „Вярно“ и „Невярно“, но можех да използвам всичко.
Например, можех да направя това вместо това:
SELECT IIF( 1 < 2, 'Fail', 'Pass' );
Резултат:
Fail
Или може да е нещо напълно премахнато от „вярен“ или „грешен“ отговор от двоичен тип.
Например:
SELECT IIF( 1 < 2, 'Deadlift', 'Bench Press' );
Резултат:
Deadlift
Тестване на променлива
На практика обикновено тествате променливи, колони и т.н., а не константи, както в предишните примери.
Ето пример, който тества променлива.
DECLARE @bankBalance int = 123;
SELECT IIF(@bankBalance > 100, 'Rich!', 'Poor');
Резултат:
Rich!
Пример за база данни
Ето пример, който използва колони от база данни.
SELECT TOP(10)
Name,
Population,
IIF(
Population > 400000,
'Big City',
'Small City'
) AS 'Big/Small'
FROM city;
Резултат:
+----------------+--------------+-------------+ | Name | Population | Big/Small | |----------------+--------------+-------------| | Kabul | 1780000 | Big City | | Qandahar | 237500 | Small City | | Herat | 186800 | Small City | | Mazar-e-Sharif | 127800 | Small City | | Amsterdam | 731200 | Big City | | Rotterdam | 593321 | Big City | | Haag | 440900 | Big City | | Utrecht | 234323 | Small City | | Eindhoven | 201843 | Small City | | Tilburg | 193238 | Small City | +----------------+--------------+-------------+
Вложени IIF() функции
Ето пример за вмъкване на IIF()
функция. Под „гнездене“ имам предвид, че предавам друг IIF()
функция като аргумент към външния IIF()
функция.
DECLARE @bankBalance int = 123;
SELECT IIF(
@bankBalance > 100,
IIF(@bankBalance > 150, 'Rich!', 'Wealthy'),
'Poor'
);
Резултат:
Wealthy
Можете да вложите IIF()
функции до ниво 10.