A função DECODE tem dois usos, dependendo dos parâmetros fornecidos. Você pode usá-la como uma ramificação condicional IF-THEN-ELSE ou para decodificar uma string de um formato de codificação especificado. Este tópico descreve a sintaxe e fornece exemplos para ambos os usos.
Selecione a ramificação IF-THEN-ELSE
Sintaxe
DECODE(<expression>, <search>, <result>[, <search>, <result>]...[, <default>])
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
expression |
Sim |
A expressão a ser comparada. |
|
search |
Sim |
O item de pesquisa a ser comparado com expression. |
|
result |
Sim |
O valor a ser retornado se search e expression coincidirem. |
|
default |
Não |
Se nenhum item de pesquisa coincidir, a função retornará o valor padrão. Se você não especificar default, a função retornará NULL. |
Todos os valores de result devem ter o mesmo tipo de dado ou ser NULL. A função retornará um erro se os tipos de dados forem inconsistentes.
A expression e todos os valores de search devem ter o mesmo tipo de dado. Caso contrário, a função retornará um erro.
Valor de retorno
Se houver correspondência, a função retornará o result correspondente.
Se não houver correspondência, a função retornará o valor default.
Se você não especificar default, a função retornará NULL.
Se um valor correspondente aparecer em várias opções de search, a função retornará o resultado da primeira ocorrência.
O MaxCompute SQL normalmente retorna NULL ao avaliar
NULL=NULL. No entanto, a função DECODE trata NULL como igual a NULL.
Exemplo
Uma tabela chamada sale_detail contém os campos shop_name string, customer_id string e total_price double. A tabela inclui os seguintes dados:
+------------+-------------+-------------+------------+------------+
| shop_name | customer_id | total_price | sale_date | region |
+------------+-------------+-------------+------------+------------+
| s1 | c1 | 100.1 | 2013 | china |
| s2 | c2 | 100.2 | 2013 | china |
| s3 | c3 | 100.3 | 2013 | china |
| null | c5 | NULL | 2014 | shanghai |
| s6 | c6 | 100.4 | 2014 | shanghai |
| s7 | c7 | 100.5 | 2014 | shanghai |
+------------+-------------+-------------+------------+------------+
Veja o seguinte exemplo de comando:
-- If customer_id is 'c1', return 'Taobao'. If it is 'c2', return 'Alipay'. If it is 'c3', return 'Aliyun'. If it is NULL, return 'N/A'. Otherwise, return 'Others'.
SELECT DECODE(customer_id, 'c1', 'Taobao', 'c2', 'Alipay', 'c3', 'Aliyun', Null, 'N/A', 'Others') AS RESULT FROM sale_detail;
-- This is equivalent to the following statement.
IF customer_id = c1 THEN RESULT := 'Taobao';
ELSEIF customer_id = c2 THEN RESULT := 'Alipay';
ELSEIF customer_id = c3 THEN RESULT := 'Aliyun'; ...
ELSE RESULT := 'Others';
END IF;
A função retorna o seguinte resultado:
+------------+
| result |
+------------+
| Others |
| Others |
| Others |
| Taobao |
| Alipay |
| Aliyun |
+------------+
Decodificar uma string de um formato especificado
Sintaxe
STRING DECODE(BINARY <str>, STRING <charset>)
Parâmetros
Parâmetro | Obrigatório | Descrição |
str | Sim | Tipo BINARY. A string a ser decodificada. |
charset | Sim | Tipo STRING. O formato de codificação. Valores válidos: UTF-8, UTF-16, UTF-16LE, UTF-16BE, ISO-8859-1 e US-ASCII. Nota Os formatos de codificação ISO-8859-1 e US-ASCII suportam codificação e decodificação apenas para caracteres em inglês. A função não suporta caracteres em chinês. |
Valor de retorno
Retorna um valor do tipo STRING. Se str ou charset for NULL, a função retornará NULL.
Exemplos
-
Exemplo 1: O comando a seguir codifica a string "Chinese sample" no formato UTF-8.
-- Encode and decode SELECT DECODE(ENCODE("Chinese sample","UTF-8"), "UTF-8");A função retorna o seguinte resultado:
+-----+ | _c0 | +-----+ | Chinese sample | +-----+ -
Exemplo 2: Um parâmetro de entrada é NULL. Execute o seguinte comando:
SELECT DECODE(ENCODE("Chinese sample","UTF-8"), NULL);A função retorna o seguinte resultado:
+-----+ | _c0 | +-----+ | NULL | +-----+
Funções relacionadas
A função DECODE é classificada como função diversa e como função de string. Para mais informações sobre outras funções diversas, consulte Other functions. Para mais informações sobre outras funções de string, consulte String functions.