- Categorias:
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> ] )
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 comoUNION
,INTERSECT
,EXCEPT
eMINUS
. 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);
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 | +---------+---------------+
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 | +---------+---------------+