Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como o IIF() funciona no SQL Server


No SQL Server, o IIF() função (não confundir com a função IF instrução) é uma função condicional que retorna o segundo ou terceiro argumento com base na avaliação do primeiro argumento.

É uma forma abreviada de escrever um CASE expressão. É logicamente equivalente a CASE WHEN X THEN Y ELSE Z END assumindo IIF(X, Y, Z) .

IIF() é uma abreviação de Se imediato .

Sintaxe


A sintaxe fica assim:
IIF ( boolean_expression, true_value, false_value )

Onde:
  • expressão_booleana é a expressão a ser avaliada.
  • true_value é retornado se boolean_expression é verdade.
  • false_value é retornado se boolean_expression é falso ou desconhecido.

Como com CASE expressões, IIF() instruções podem ser aninhadas apenas até o nível máximo de 10.

Exemplo


Aqui está um exemplo básico para demonstrar como IIF() funciona.
SELECT IIF( 1 < 2, 'True', 'False' );

Resultado:
True

Nesse caso, a expressão a ser avaliada é 1 < 2 . É verdade que 1 é menor que 2, então o segundo argumento foi retornado.

Isso é o equivalente a fazer o seguinte.
SELECT 
  CASE WHEN 1 < 2 THEN 'True'
    ELSE 'False'
  END;

Resultado:
True

Nesses exemplos, usei as palavras “True” e “False”, mas poderia ter usado qualquer coisa.

Por exemplo, eu poderia ter feito isso em vez disso:
SELECT IIF( 1 < 2, 'Fail', 'Pass' );

Resultado:
Fail

Ou pode ser algo completamente removido de uma resposta do tipo binário “verdadeiro” ou “falso”.

Por exemplo:
SELECT IIF( 1 < 2, 'Deadlift', 'Bench Press' );

Resultado:
Deadlift

Testando uma variável


Na prática, você normalmente testaria variáveis, colunas, etc, em vez de constantes, como nos exemplos anteriores.

Aqui está um exemplo que testa uma variável.
DECLARE @bankBalance int = 123;
SELECT IIF(@bankBalance > 100, 'Rich!', 'Poor');

Resultado:
Rich!

Exemplo de banco de dados


Aqui está um exemplo que usa colunas de um banco de dados.
SELECT TOP(10)
    Name,
    Population,
    IIF( 
        Population > 400000, 
        'Big City', 
        'Small City' 
        ) AS 'Big/Small'
FROM city;

Resultado:
+----------------+--------------+-------------+
| 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  |
+----------------+--------------+-------------+

Funções IIF() aninhadas


Aqui está um exemplo de aninhamento de um IIF() função. Por “aninhar” quero dizer que passo outro IIF() função como um argumento para o IIF() externo função.
DECLARE @bankBalance int = 123;
SELECT IIF(
    @bankBalance > 100, 
    IIF(@bankBalance > 150, 'Rich!', 'Wealthy'), 
    'Poor'
    );

Resultado:
Wealthy

Você pode aninhar IIF() funções até um nível de 10.