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. Este valor é retornado se o condition for verdadeiro.

expr2

Uma expressão geral. Este valor será devolvido se o condition não for verdadeiro (isto é, se for falso ou NULL).

Retornos

Esta função retorna um valor do tipo de dados VARCHAR.

Notas de uso

  • O condition pode incluir uma instrução SELECT contendo operadores definidos, tais como UNION, INTERSECT, EXCEPT e 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                      |
+----------------------------+

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