Categorias:

Funções de expressão condicional

IFF

Retorna um de dois valores dependendo se uma expressão booleana é avaliada como verdadeira ou falsa. Esta função é semelhante a uma expressão de nível único if-then-else. É semelhante a CASE, mas só permite uma única condição. Você pode usá-lo para adicionar lógica condicional a instruções SQL.

Sintaxe

IFF( <condition> , <expr1> , <expr2> ) 
Copy

Argumentos

condition

A condição é uma expressão que deve ser avaliada como um valor BOOLEAN (TRUE, FALSE ou NULL).

Se condition é avaliado como TRUE, retorna expr1, caso contrário retorna expr2.

expr1

Uma expressão geral. A função retorna este valor se o endereço condition for verdadeiro.

expr2

Uma expressão geral. A função retorna este valor se o condition não for verdadeiro (ou seja, se for falso ou NULL).

Retornos

Esta função pode retornar um valor de qualquer tipo. A função pode retornar NULL se o valor da expressão retornada for NULL.

Notas de uso

condition pode incluir uma instrução SELECT contendo operadores definidos, tais como UNION, INTERSECT e EXCEPT (MINUS). Ao utilizar os operadores do conjunto, certifique-se de que os tipos de dados sejam compatíveis. Para obter mais detalhes, consulte Notas de uso geral no tópico Operadores de conjuntos.

Detalhes do agrupamento

O valor retornado da função retém a especificação de agrupamento do agrupamento com maior precedência dos argumentos expr1 e expr2.

Exemplos

Os exemplos a seguir usam a função IFF.

Retorne expr1 porque a condição é avaliada como verdadeira:

SELECT IFF(TRUE, 'true', 'false'); 
Copy
+----------------------------+ | IFF(TRUE, 'TRUE', 'FALSE') | |----------------------------| | true | +----------------------------+ 

Retorne expr2 porque a condição é avaliada como falsa:

SELECT IFF(FALSE, 'true', 'false'); 
Copy
+-----------------------------+ | IFF(FALSE, 'TRUE', 'FALSE') | |-----------------------------| | false | +-----------------------------+ 

Retorne expr2 porque a condição é avaliada como NULL:

SELECT IFF(NULL, 'true', 'false'); 
Copy
+----------------------------+ | IFF(NULL, 'TRUE', 'FALSE') | |----------------------------| | false | +----------------------------+ 

Retorna NULL porque o valor da expressão retornada é NULL:

SELECT IFF(TRUE, NULL, 'false'); 
Copy
+--------------------------+ | IFF(TRUE, NULL, 'FALSE') | |--------------------------| | NULL | +--------------------------+ 

Retorne expr1 (integer) se o valor for um inteiro, ou retorne expr2 (non-integer) se o valor não for um inteiro:

SELECT value, IFF(value::INT = value, 'integer', 'non-integer') FROM ( SELECT column1 AS value FROM VALUES(1.0), (1.1), (-3.1415), (-5.000), (NULL) ) ORDER BY value DESC; 
Copy
+---------+---------------------------------------------------+ | VALUE | IFF(VALUE::INT = VALUE, 'INTEGER', 'NON-INTEGER') | |---------+---------------------------------------------------| | NULL | non-integer | | 1.1000 | non-integer | | 1.0000 | integer | | -3.1415 | non-integer | | -5.0000 | integer | +---------+---------------------------------------------------+ 

Retorne expr1 (High) se o valor for maior que 50, ou retorne expr2 (Low) se o valor for 50 ou menor (ou NULL):

SELECT value, IFF(value > 50, 'High', 'Low') FROM ( SELECT column1 AS value FROM VALUES(22), (63), (5), (99), (NULL) ); 
Copy
+-------+--------------------------------+ | VALUE | IFF(VALUE > 50, 'HIGH', 'LOW') | |-------+--------------------------------| | 22 | Low | | 63 | High | | 5 | Low | | 99 | High | | NULL | Low | +-------+--------------------------------+