- Categorias:
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> )
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, retornaexpr1
, caso contrário retornaexpr2
.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');
+----------------------------+
| IFF(TRUE, 'TRUE', 'FALSE') |
|----------------------------|
| true |
+----------------------------+
Retorne expr2
porque a condição é avaliada como falsa:
SELECT IFF(FALSE, 'true', 'false');
+-----------------------------+
| IFF(FALSE, 'TRUE', 'FALSE') |
|-----------------------------|
| false |
+-----------------------------+
Retorne expr2
porque a condição é avaliada como NULL:
SELECT IFF(NULL, 'true', 'false');
+----------------------------+
| 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;
+---------+---------------------------------------------------+
| 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) );
+-------+--------------------------------+
| VALUE | IFF(VALUE > 50, 'HIGH', 'LOW') |
|-------+--------------------------------|
| 22 | Low |
| 63 | High |
| 5 | Low |
| 99 | High |
| NULL | Low |
+-------+--------------------------------+