Função DECODE do Oracle no PostgreSQL

4 respostas
M

Pessoal,

Dado o seguinte trecho de consulta SQL do Oracle :

decode(a.alu_ecu_niv_tipo,1,‘Mestrado’,2,‘Mestrado Profissionalizante’,3,‘Doutorado’)

gostaria de saber como posso fazer isto no PostgreSQL 8.3 se, até onde sei, este SGBD não possui uma função nativa para realizar tal tarefa.

Agradece,

Max Carvalho

4 Respostas

M

O post acima é antigo, mas estou enfrentando o mesmo problema.
Estou tentando usar o seguinte :

CASE hd.dia WHEN 2 THEN 'Segunda' WHEN 3 THEN 'Terça' WHEN 4 THEN 'Quarta' WHEN 5 THEN 'Quinta' WHEN 6 THEN 'Sexta' END

Mas quando tento executar a query, ocorre a seguinte mensagem de erro

ERRO:  operador não existe: character = integer
HINT:  Nenhum operador corresponde com o nome e o(s) tipo(s) de argumento(s) informados. Você precisa adicionar conversões de tipo explícitas.

Eu necessito retornar na query, o nome do dia da semana, e não o código.
Alguém poderia me ajudar ?

mauricioadl

maxcarvalho:
O post acima é antigo, mas estou enfrentando o mesmo problema.
Estou tentando usar o seguinte :

CASE hd.dia WHEN 2 THEN 'Segunda' WHEN 3 THEN 'Terça' WHEN 4 THEN 'Quarta' WHEN 5 THEN 'Quinta' WHEN 6 THEN 'Sexta' END

Mas quando tento executar a query, ocorre a seguinte mensagem de erro

ERRO:  operador não existe: character = integer
HINT:  Nenhum operador corresponde com o nome e o(s) tipo(s) de argumento(s) informados. Você precisa adicionar conversões de tipo explícitas.

Eu necessito retornar na query, o nome do dia da semana, e não o código.
Alguém poderia me ajudar ?

se nao me engano, esta faltando o comparador, tipo:

when hd.dia = 3 then ‘terça’ when hd.dia = 4 then ‘quarta’

[]'s

M

mauricioadl:
maxcarvalho:
O post acima é antigo, mas estou enfrentando o mesmo problema.
Estou tentando usar o seguinte :

CASE hd.dia WHEN 2 THEN 'Segunda' WHEN 3 THEN 'Terça' WHEN 4 THEN 'Quarta' WHEN 5 THEN 'Quinta' WHEN 6 THEN 'Sexta' END

Mas quando tento executar a query, ocorre a seguinte mensagem de erro

ERRO:  operador não existe: character = integer
HINT:  Nenhum operador corresponde com o nome e o(s) tipo(s) de argumento(s) informados. Você precisa adicionar conversões de tipo explícitas.

Eu necessito retornar na query, o nome do dia da semana, e não o código.
Alguém poderia me ajudar ?

se nao me engano, esta faltando o comparador, tipo:

when hd.dia = 3 then ‘terça’ when hd.dia = 4 then ‘quarta’

[]'s

Consegui resolver assim:

..
CASE hd.dia WHEN '2' THEN 'Segunda' WHEN '3' THEN 'Terça' WHEN '4' THEN 'Quarta' WHEN '5' THEN 'Quinta' WHEN '6' THEN 'Sexta' END as Dia
..
pdpbom

Pessoal
Até onde sei… ( não é muito …).

O Postgresql não possui decode igual Oracle, a resolução é como vocês fizeram com o uso de case.

o erro

ERRO:  operador não existe: character = integer

Da-se por que você estava testando

CASE hd.dia WHEN 2 THEN 'Segunda' 
                   WHEN 3 THEN 'Terça' 
                   WHEN 4 THEN 'Quarta' 
                   WHEN 5 THEN 'Quinta' 
                   WHEN 6 THEN 'Sexta' 
END

onde hd.dia é possivelmente um varchar(N) … e está sendo comparado com os inteiros 2, 3, 4, 5, 6.

Soluções seria ou colocar como string os números ou converter o campo hd.dia para int.
Foi optado por converter os números para string.

Para converter hd.dia para int tem varias maneiras:

Att

Criado 2 de abril de 2010
Ultima resposta 19 de fev. de 2013
Respostas 4
Participantes 4