As funções de fluxo de controle permitem avaliar condições diretamente em consultas SQL. O AnalyticDB for MySQL oferece suporte a quatro funções: CASE, IF, IFNULL e NULLIF.
|
Função |
Descrição |
|
|
Retorna um resultado com base na correspondência de condições. Suporta duas formas: simples (correspondência de valor) e pesquisada (expressão booleana). |
|
|
Retorna um valor se a condição for verdadeira e outro se for falsa ou NULL. |
|
|
Retorna a primeira expressão caso não seja NULL; caso contrário, retorna a segunda. |
|
|
Retorna NULL quando duas expressões são iguais; nos demais casos, retorna a primeira expressão. |
Dados de exemplo
Os exemplos desta página usam uma tabela chamada conditiontest. Execute as instruções a seguir para crie a tabela e inserir dados de amostra:
CREATE TABLE conditiontest(a INT) DISTRIBUTED BY HASH(a);
INSERT INTO conditiontest VALUES (1),(2),(3);
CASE
A função CASE possui duas formas: simples e pesquisada.
CASE simples
CASE expression
WHEN value THEN result
[WHEN value THEN result ...]
[ELSE result]
END
Compara expression com cada value sequencialmente. Retorna o result da primeira ramificação WHEN correspondente. Se nenhum value corresponder, retorna o result definido na cláusula ELSE.
Exemplo:
SELECT a,
CASE a
WHEN 1 THEN 'one'
WHEN 2 THEN 'two'
ELSE 'three'
END as caseresult
FROM conditiontest;
Saída:
+---+------------+
| a | caseresult |
+---+------------+
| 2 | two |
| 1 | one |
| 3 | three |
+---+------------+
CASE pesquisado
CASE
WHEN condition THEN result
[WHEN condition THEN result...]
[ELSE result]
END
Avalia cada condition em ordem. Retorna o result da primeira condition avaliada como verdadeira. Se todas as condições forem falsas, retorna o result da cláusula ELSE.
Exemplo:
SELECT a,
CASE
WHEN a=1 THEN 'one1'
WHEN a=2 THEN 'two2'
ELSE 'three3'
END as caseresult
FROM conditiontest;
Saída:
+---+------------+
| a | caseresult |
+---+------------+
| 1 | one1 |
| 3 | three3 |
| 2 | two2 |
+---+------------+
IF
Forma com dois argumentos
IF(condition, true_value)
Retorna true_value se condition for verdadeira. Retorna NULL se condition for falsa ou NULL.
Exemplo — condição verdadeira:
SELECT IF((2+3)>4,5);
Saída:
+-------+
| _col0 |
+-------+
| 5 |
Forma com três argumentos
IF(condition, true_value, false_value)
Retorna true_value se condition for verdadeira. Retorna false_value se condition for falsa ou NULL.
Exemplo — condição falsa:
SELECT IF((2+3)<5,5,6);
Saída:
+-------+
| _col0 |
+-------+
| 6 |
IFNULL
IFNULL(expr1, expr2)
Retorna expr1 se não for NULL. Retorna expr2 se expr1 for NULL.
Exemplo 1 — expr1 é NULL:
SELECT IFNULL(NULL,2);
Saída:
+-------+
| _col0 |
+-------+
| 2 |
+-------+
Exemplo 2 — expr1 não é NULL:
SELECT IFNULL(1,0);
Saída:
+-------+
| _col0 |
+-------+
| 1 |
+-------+
NULLIF
NULLIF(expr1, expr2)
Retorna NULL se expr1 for igual a expr2. Nos demais casos, retorna expr1.
Exemplo 1 — expressões diferentes:
SELECT NULLIF(2,1);
Saída:
+-------+
| _col0 |
+-------+
| 2 |
+-------+
Exemplo 2 — expressões iguais:
SELECT NULLIF(2,2);
Saída:
+-------+
| _col0 |
+-------+
| NULL |
+-------+