Função DECODE
Uma expressão DECODE substitui um valor específico por outro valor específico ou por valor padrão, dependendo do resultado de uma condição de igualdade. Essa operação é equivalente à operação de uma expressão CASE simples ou de uma instrução IF-THEN-ELSE.
Sintaxe
DECODE ( expression, search, result [, search, result ]... [ ,default ] )
Este tipo de expressão é útil para substituir abreviações ou códigos armazenados em tabelas por valores de negócio significativos que são necessário para relatórios.
Parâmetros
- expressão
-
A origem do valor que você deseja comparar, tal como uma coluna em uma tabela.
- pesquisa
-
O valor de destino que é comparado à expressão de origem, tal como um valor numérico ou string de caracteres. A expressão da pesquisa deve avaliar para um único valor fixo. Você não pode especificar uma expressão que avalie para um intervalo de valores, tal como
age between 20 and 29
; você precisa especificar pares separados de pesquisa/resultados para cada valor que você deseja substituir.O tipo de dados de todas as instâncias da expressão de pesquisa deve ser o mesmo ou compatível. Os parâmetros da expressão e pesquisa também devem ser compatíveis.
- resultado
-
O valor de substituição que a consulta retorna quando a expressão corresponde ao valor da pesquisa. Você deve incluir pelo menos um par de pesquisa/resultados na expressão de DECODE.
OS tipos de dados de todas as instâncias da expressão de resultado deve ser o mesmo ou compatível. Os parâmetros resultado e padrão também devem ser compatíveis.
- padrão
-
Um valor padrão opcional que é usado para casos em que a condição da pesquisa falha. Se você não especificar uma valor padrão, a expressão DECODE retornará NULL.
Observações de uso
Se o valor da expressão e o valor da pesquisa forem NULL, o resultado de DECODE será o valor de resultado correspondente. Para uma ilustração deste uso da função, consulte a seção de exemplos.
Quando usada essa forma, DECODE é semelhante a Função NVL2, mas há algumas diferenças. Para uma descrição dessas diferenças, consulte as observações de uso de NVL2.
Exemplos
Quando o valor 2008-06-01
existe na coluna caldate de datetable, o exemplo a seguir a substitui por June 1st, 2008
. O exemplo substitui todos outros valores de caldate por NULL.
select decode(caldate, '2008-06-01', 'June 1st, 2008') from datetable where month='JUN' order by caldate; case ---------------- June 1st, 2008 ... (30 rows)
O seguinte exemplo usa uma expressão DECODE para converter as cinco colunas CATNAME abreviadas na tabela CATEGORY para nomes completos e para converter outros valores na coluna para Unknown
.
select catid, decode(catname, 'NHL', 'National Hockey League', 'MLB', 'Major League Baseball', 'MLS', 'Major League Soccer', 'NFL', 'National Football League', 'NBA', 'National Basketball Association', 'Unknown') from category order by catid; catid | case -------+--------------------------------- 1 | Major League Baseball 2 | National Hockey League 3 | National Football League 4 | National Basketball Association 5 | Major League Soccer 6 | Unknown 7 | Unknown 8 | Unknown 9 | Unknown 10 | Unknown 11 | Unknown (11 rows)
Use uma expressão DECODE para localizar locais de evento no Colorado e em Nevada com NULL na coluna VENUESEATS; converta os NULLS para zeros. Se a coluna VENUESEATS não for NULA, retorne 1 como resultado.
select venuename, venuestate, decode(venueseats,null,0,1) from venue where venuestate in('NV','CO') order by 2,3,1; venuename | venuestate | case ------------------------------+----------------+----------- Coors Field | CO | 1 Dick's Sporting Goods Park | CO | 1 Ellie Caulkins Opera House | CO | 1 INVESCO Field | CO | 1 Pepsi Center | CO | 1 Ballys Hotel | NV | 0 Bellagio Hotel | NV | 0 Caesars Palace | NV | 0 Harrahs Hotel | NV | 0 Hilton Hotel | NV | 0 ... (20 rows)