Функция IIF в языке T-SQL – описание и примеры

Привет! В этой заметке я расскажу о функции IIF языка T-SQL, которая предназначена для упрощения написания условных конструкций с использованием всем известного выражения CASE или операторов IF…ELSE…THEN.

Функция IIF в языке T-SQL

Функция 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.

Заметка! Начинающим программистам T-SQL рекомендую почитать мою книгу – Путь программиста T-SQL – это самоучитель по изучению данного языка.

Более опытным программистам рекомендую книгу – Стиль программирования на T-SQL, она направлена на повышение качества T-SQL кода.

Примеры использования функции IIF в T-SQL

Сейчас давайте рассмотрим несколько примеров работы функции IIF.

Пример 1 – Простое использование функции IIF

В этом примере в качестве логического выражения мы укажем 1 < 2, т.е. спросим 1 меньше двух, в результате мы получим значение второго параметра, в нашем случае TRUE, так как очевидно, что наше логическое выражение возвращает истину, т.е. 1 действительно меньше 2.

    
   SELECT IIF(1 < 2, 'TRUE', 'FALSE') AS Result;

Скриншот 1

Однако, стоит нам только изменить логическое выражение, к примеру мы укажем 1 > 2, то в качестве результата мы получим значение третьего параметра, т.е. FALSE, так как 1 никак не может быть больше 2.

   
   SELECT IIF(1 > 2, 'TRUE', 'FALSE') AS Result;

Скриншот 2

Пример 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;

Скриншот 3

А в данном запросе мы подставляем уже текстовые значения.

   
   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;

Скриншот 4

Пример 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;

Скриншот 5

Пример 4 – Вложенный IIF

Функцию IIF можно использовать в выражении внутри другой функции IIF. Например, в следующем SQL запросе мы хотим узнать, к какой категории относится товар по его наименованию. Для этого мы сначала сравниваем значение наименования товара с одним текстовым значением, а затем, в зависимости от результата, продолжаем сравнивать, но только уже с другим текстовым значением.

   
   DECLARE @ProductName VARCHAR(100) = 'Монитор';
   SELECT IIF ( @ProductName = 'Смартфон',
               'Мобильные устройства',
               IIF( @ProductName = 'Монитор', 'Комплектующие ПК', 'Без категории')
              ) AS Result;

Скриншот 6

В данном случае первый IIF у нас вернул FALSE, поэтому мы перешли к третьему параметру, в котором у нас указан еще один IIF, а он в свою очередь вернул TRUE, поэтому в результате мы получили значение «Комплектующие ПК».

Однако, если указать в переменной значение, которое не будет соответствовать нужной нам категории, мы получим значение «Без категории».

   
   DECLARE @ProductName VARCHAR(100) = 'Стол';
   SELECT IIF ( @ProductName = 'Смартфон',
                'Мобильные устройства',
                IIF( @ProductName = 'Монитор', 'Комплектующие ПК', 'Без категории')
              ) AS Result;

Скриншот 7

Пример 5 – Использование функции IIF в запросе к таблице

Функцию IIF так же, как и другие функции, можно использовать в обычном SQL запросе к таблице или любому другому табличному выражению. Иными словами, в качестве параметров в функцию IIF можно передавать названия столбцов.

В этом примере мы на основе категории товара увеличиваем его цену.

   
   SELECT Category,
          ProductName,
          Price,
          Price + IIF(Category = 1, 10, 15) AS TotalPrice
   FROM Goods;

Скриншот 8

На сегодня это все, мы рассмотрели функцию IIF языка T-SQL, которая упрощает написание различных условных конструкций с использованием CASE. Надеюсь, материал был Вам полезен, до новых встреч на сайте Info-Comp.ru!

Понравилась статья? Поделиться с друзьями:
Заметки IT специалиста
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:
Нажимая на кнопку «Отправить комментарий», я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.