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.