Categorias:

Funções de expressão condicional

DECODE

Compara a expressão selecionada com cada expressão de busca em ordem. Assim que uma expressão de pesquisa corresponde à expressão de seleção, a expressão de resultado correspondente é devolvida.

Nota

DECODE em Snowflake é diferente da função DECODE em PostgreSQL, que converte os dados em diferentes codificações.

Sintaxe

DECODE( <expr> , <search1> , <result1> [ , <search2> , <result2> ... ] [ , <default> ] )
Copy

Argumentos

expr

Esta é a “expressão selecionada”. As “expressões de busca” são comparadas a esta expressão selecionada, e se houver uma correspondência, então DECODE retorna o resultado que corresponde a esta expressão de busca. A expressão selecionada é tipicamente uma coluna, mas pode ser uma subconsulta, literal, ou outra expressão.

searchN

As expressões de busca indicam os valores a serem comparados com a expressão selecionada. Se uma destas expressões de busca for correspondente, a função retorna o result correspondente. Se mais de uma expressão de busca for correspondente, apenas o resultado da primeira correspondência é retornado.

resultN

Os resultados são os valores que serão retornados se uma das expressões da busca corresponder à expressão selecionada.

default

Se um padrão opcional for especificado, e se nenhuma das expressões de busca corresponder à expressão selecionada, então DECODE retornará este valor padrão.

Notas de uso

  • Observe que, ao contrário do CASE, um valor NULL na expressão selecionada corresponde a um valor NULL nas expressões de pesquisa.

  • O expr pode incluir 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

  • As especificações de agrupamento da expressão selecionada e das expressões de busca devem ser todas compatíveis.

  • O valor retornado da função retém a especificação de agrupamento do resultado com o agrupamento de maior precedência.

Exemplos

Criar uma tabela e inserir linhas:

CREATE TABLE d (column1 INTEGER);
INSERT INTO d (column1) VALUES 
    (1),
    (2),
    (NULL),
    (4);
Copy

Exemplo com um valor padrão 'other' (observar que NULL é igual a NULL):

SELECT column1, decode(column1, 
                       1, 'one', 
                       2, 'two', 
                       NULL, '-NULL-', 
                       'other'
                      ) AS decode_result
    FROM d;
+---------+---------------+
| COLUMN1 | DECODE_RESULT |
|---------+---------------|
|       1 | one           |
|       2 | two           |
|    NULL | -NULL-        |
|       4 | other         |
+---------+---------------+
Copy

Exemplo sem um valor padrão (note que o valor não correspondente retorna NULL):

SELECT column1, decode(column1, 
                       1, 'one', 
                       2, 'two', 
                       NULL, '-NULL-'
                       ) AS decode_result
    FROM d;
+---------+---------------+
| COLUMN1 | DECODE_RESULT |
|---------+---------------|
|       1 | one           |
|       2 | two           |
|    NULL | -NULL-        |
|       4 | NULL          |
+---------+---------------+
Copy