Привет! В этой заметке я расскажу о функции IIF языка T-SQL, которая предназначена для упрощения написания условных конструкций с использованием всем известного выражения CASE или операторов IF…ELSE…THEN.
- Функция IIF языка T-SQL
- Синтаксис IIF
- Особенности работы функции IIF
- Примеры использования функции IIF в T-SQL
- Пример 1 – Простое использование функции IIF
- Пример 2 – Использование функции IIF с переменными
- Пример 3 – Использование функции IIF с более сложным логическим выражением
- Пример 4 – Вложенный IIF
- Пример 5 – Использование функции IIF в запросе к таблице
Функция IIF языка T-SQL
IIF – логическая функция языка T-SQL, которая возвращает одно из двух значений в зависимости от результата логического выражения. Появилась данная функция в 2012 версии SQL Server.
Синтаксис IIF
IIF ( boolean_expression, true_value, false_value )
где,
- boolean_expression – логическое выражение. Если указано не логическое выражение, то возникнет ошибка синтаксиса;
- true_value – значение, которое будет возвращено, если boolean_expression имеет значение TRUE;
- false_value – значение, которое будет возвращено, если boolean_expression имеет значение FALSE.
Таким образом, функция IIF имеет 3 параметра, в первом параметре указывается логическое выражение, во втором мы пишем значение, которое будет возвращено, если логическое выражение вернет TRUE, в третьем — значение, которое будет возвращено, если логическое выражение вернет FALSE.
Особенности работы функции IIF
true_value и false_value могут иметь разные типы данных, при этом функция IIF вернет результат с тем типом данных, который будет иметь наивысший приоритет.
Если рассматривать внутреннюю работу функции IIF, то все действия в ней приводятся к выражению CASE и, таким образом, функция IIF является абсолютным эквивалентом выражения CASE, а создана и применяется она для более быстрого и простого написания логических выражений с использованием CASE.
Параметры true_value и false_value не могут одновременно содержать значения NULL, как минимум одно из этих значений должно отличаться от NULL, в противном случае, т.е. если указать NULL для обоих этих параметров, мы получим примерно следующую ошибку
Сообщение 8133, уровень 16, состояние 1, строка 1
Как минимум одно из результирующих выражений в спецификации CASE должно отличаться от константы NULL.
Заметка! Для комплексного изучения языка SQL и T-SQL рекомендую посмотреть мои видеокурсы по T-SQL, которые помогут Вам «с нуля» научиться работать с SQL и программировать на T-SQL в Microsoft SQL Server.
Примеры использования функции IIF в T-SQL
Сейчас давайте рассмотрим несколько примеров работы функции IIF.
Пример 1 – Простое использование функции IIF
В этом примере в качестве логического выражения мы укажем 1 < 2, т.е. спросим 1 меньше двух, в результате мы получим значение второго параметра, в нашем случае TRUE, так как очевидно, что наше логическое выражение возвращает истину, т.е. 1 действительно меньше 2.
SELECT IIF(1 < 2, 'TRUE', 'FALSE') AS Result;
Однако, стоит нам только изменить логическое выражение, к примеру мы укажем 1 > 2, то в качестве результата мы получим значение третьего параметра, т.е. FALSE, так как 1 никак не может быть больше 2.
SELECT IIF(1 > 2, 'TRUE', 'FALSE') AS Result;
Пример 2 – Использование функции IIF с переменными
Во всех параметрах функции IIF можно использовать переменные, в следующем примере в функцию IIF подставляются целочисленные переменные.
DECLARE @A INT = 5, @B INT = 3, @true_value INT = 1, @false_value INT = 0; SELECT IIF ( @A >= @B, @true_value, @false_value ) AS Result;
А в данном запросе мы подставляем уже текстовые значения.
DECLARE @A INT = 5, @B INT = 3, @true_value VARCHAR(10) = 'A больше B', @false_value VARCHAR(10) = 'A меньше B'; SELECT IIF ( @A > @B, @true_value, @false_value ) AS Result;
Пример 3 – Использование функции IIF с более сложным логическим выражением
В качестве первого параметра, т.е. логического выражения, можно указывать более сложные выражения, которые будут содержать различные вычисления. Например, в следующем примере мы проверяем не просто значения двух переменных, а результат их перемножения, в данном случае мы спрашиваем, будет ли он больше 10.
DECLARE @A INT = 5, @B INT = 3, @true_value INT = 1, @false_value INT = 0; SELECT IIF ( @A * @B > 10, @true_value, @false_value ) AS Result;
Пример 4 – Вложенный IIF
Функцию IIF можно использовать в выражении внутри другой функции IIF. Например, в следующем SQL запросе мы хотим узнать, к какой категории относится товар по его наименованию. Для этого мы сначала сравниваем значение наименования товара с одним текстовым значением, а затем, в зависимости от результата, продолжаем сравнивать, но только уже с другим текстовым значением.
DECLARE @ProductName VARCHAR(100) = 'Монитор'; SELECT IIF ( @ProductName = 'Смартфон', 'Мобильные устройства', IIF( @ProductName = 'Монитор', 'Комплектующие ПК', 'Без категории') ) AS Result;
В данном случае первый IIF у нас вернул FALSE, поэтому мы перешли к третьему параметру, в котором у нас указан еще один IIF, а он в свою очередь вернул TRUE, поэтому в результате мы получили значение «Комплектующие ПК».
Однако, если указать в переменной значение, которое не будет соответствовать нужной нам категории, мы получим значение «Без категории».
DECLARE @ProductName VARCHAR(100) = 'Стол'; SELECT IIF ( @ProductName = 'Смартфон', 'Мобильные устройства', IIF( @ProductName = 'Монитор', 'Комплектующие ПК', 'Без категории') ) AS Result;
Пример 5 – Использование функции IIF в запросе к таблице
Функцию IIF так же, как и другие функции, можно использовать в обычном SQL запросе к таблице или любому другому табличному выражению. Иными словами, в качестве параметров в функцию IIF можно передавать названия столбцов.
В этом примере мы на основе категории товара увеличиваем его цену.
SELECT Category, ProductName, Price, Price + IIF(Category = 1, 10, 15) AS TotalPrice FROM Goods;
На сегодня это все, мы рассмотрели функцию IIF языка T-SQL, которая упрощает написание различных условных конструкций с использованием CASE. Надеюсь, материал был Вам полезен, до новых встреч на сайте Info-Comp.ru!
Приглашаю всех желающих пройти мои онлайн-курсы по изучению языка T-SQL – https://self-learning.ru/courses/t-sql
На курсах используется моя авторская последовательная методика обучения и рассматриваются все конструкции языка SQL и T-SQL. Каждый курс включает огромное количество материалов: видео, текстовый материал, тесты, домашние задания, скрипты, а также сертификат о прохождении.
На курсах Вы можете заниматься в комфортном для себя темпе не выходя из дома в любое удобное для Вас время.