Função DECODE do Oracle no PostgreSQL

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

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 ?

[quote=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 ?[/quote]

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

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

[]'s

[quote=mauricioadl][quote=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 ?[/quote]

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

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

[]'s

[/quote]

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
..

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