Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как работи IIF() в SQL Server

В 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Добавете нова колона на таблица към конкретна редна позиция в Microsoft SQL Server

  2. Как да изберете дата без час в SQL

  3. SQL Server BCP експортира повреден файл?

  4. SQL JOIN срещу IN производителност?

  5. SQL Server 2016 :sys.dm_exec_function_stats