Re: Como hacer un NVL o DECODE en postgresql

From: <dkuroki(at)dbas(dot)com(dot)ar>
To: "Miguel Higuera" <miguelstratoss(at)gmail(dot)com>, "WILLIAM PARRA" <wilparra(at)yahoo(dot)com>, "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Como hacer un NVL o DECODE en postgresql
Date: 2005-07-06 17:16:04
Message-ID: KWhdt2gv.1120670164.5959280.dkuroki@dbas.com.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Lista,

DECODE se puede reemplazar con CASE. Por ejemplo:

Oracle:
SELECT
decode(tipo_identificación,'C','Cedula','T','Tarjeta','Otra')

Postgresql:
SELECT CASE WHEN tipo_identificacion='C' THEN 'Cedula' WHEN
tipo_identificacion='T' THEN 'Tarjeta' ELSE 'Otra' END

Considero que CASE es mucho mas flexible que DECODE.
Si tenes mucho codigo escrito con DECODE se me ocurre que podrias
escribir una funcion que lo resuelva usando CASE.

Dorian Kuroki
DBAS Argentina.

On 7/6/2005, "Miguel Higuera" <miguelstratoss(at)gmail(dot)com> wrote:

>hola señor William.. es muy simple solo debe cambiar el NVL por COALESCE y
>listos..
>
>lo del decode no lo se...
>
>lo del OUTER ahí va un ejemplo para tres motores
>
>if ($motor="informix")
>$consulta = "SELECT movil.item, inve.descripcion, movil.origen,
>movil.cantidad,movil.cantidad AS cantidad_o, movil.cantidad_rec,
>movil.cantidad_cargada,movil.valor, movil.iva, movil.descuento,movil.nota,
>movil.unidad,movil.costo_tr, movil.valor AS valor_o, movil.descuento AS
>desc_o, movil.iva AS iva_o, movil.origen AS origen_o, inve.serializa,
>inve.loteo, inve.linea,inve.iva AS iva_inve, inve.unidad AS uni_inve,
>movil1.centro, movil1.anuncian, publicac, agencia, medios, edicion,
>producto,pagina FROM movil, OUTER movil1, OUTER inve WHERE movil.transaccion=
>movil1.transaccion AND movil.numero = movil1.numero AND movil.origen =
>movil1.origen AND movil.item = inve.item AND
>movil.transaccion='$transaccion' AND
>movil.numero = '$numero' $sel_cantidad ORDER BY movil.origen ";
>
>if ($motor == "Oci8po") // ORACLE
>$consulta = "SELECT movil.item, inve.descripcion, movil.origen,
>movil.cantidad, movil.cantidad AS cantidad_o, movil.cantidad_rec,
>movil.cantidad_cargada,movil.valor, movil.iva, movil.descuento,movil.nota,
>movil.unidad,movil.costo_tr, movil.valor AS valor_o, movil.descuento AS
>desc_o, movil.iva AS iva_o, movil.origen AS origen_o, inve.serializa,
>inve.loteo, inve.linea,inve.iva AS iva_inve, inve.unidad AS uni_inve,
>movil1.centro, movil1.anuncian, publicac, agencia, medios, edicion,
>producto,pagina FROM movil, movil1, inve WHERE movil.transaccion =
>movil1.transaccion(+) AND movil.numero = movil1.numero(+) AND movil.origen =
>movil1.origen AND movil.item = inve.item(+) AND
>movil.transaccion='$transaccion' AND
>movil.numero = '$numero' $sel_cantidad ORDER BY movil.origen ";
>
>if ($motor == "postgres")
>$consulta = "SELECT movil.item, inve.descripcion, movil.origen,
>movil.cantidad, movil.cantidad AS cantidad_o, movil.cantidad_rec,
>movil.cantidad_cargada,movil.valor, movil.iva, movil.descuento,movil.nota,
>movil.unidad,movil.costo_tr, movil.valor AS valor_o, movil.descuento AS
>desc_o, movil.iva AS iva_o, movil.origen AS origen_o, inve.serializa,
>inve.loteo, inve.linea, inve.iva AS iva_inve, inve.unidad AS uni_inve,
>movil1.centro, movil1.anuncian, publicac, agencia, medios, edicion,
>producto,pagina FROM movil LEFT JOIN movil1 ON (movil.transaccion =
>movil1.transaccion AND movil.numero = movil1.numero) LEFT JOIN inve ON (
>movil.item = inve.item) WHERE movil.origen = movil1.origen
>movil.transaccion='$transaccion' AND
>movil.numero = '$numero' $sel_cantidad ORDER BY movil.origen ";
>
>
>Mucha suerte.
>
>El día 5/07/05, WILLIAM PARRA <wilparra(at)yahoo(dot)com> escribió:
>>
>> Hola amigos:
>>
>> Como ustedes saben, en Oracle se usan las sentencias NVL, para detectar y
>> gestionar valores nulos.
>>
>> por ejemplo select NVL(codigo_ubica,0) --> Pone cero en la columna de
>> resultados si encuentra un codigo_ubica Nulo.
>>
>> Mi primer cuestionamiento, o inquietud, y si hay una forma de hacerlo en
>> postgres.
>>
>> De otro lado, en Oracle tanbién existe una función Decode, para a partir
>> del select, de una vez decodificar los datos
>>
>> por ejemplo select
>> decode(tipo_identificación,'C','Cedula','T','Tarjeta'...) de esta forma
>> cuando la consulta encuentra 'C', o 'T' en la consulta, el sistema imprime
>> la palabra 'Cédula' o 'Tarjeta'. Habrá alguna forma de hacerlo en
>> Postgresql??
>>
>> Finalmente, me gustaría saber si en postgresql es posible hacer los *OUTER
>> JOINS, O seleccion de columnas fantasmas. *
>>
>> *Les ruego me disculpen si me extendí en mis inquietudes. Agradesco su
>> ayuda.*
>>
>> __________________________________________________
>> Correo Yahoo!
>> Espacio para todos tus mensajes, antivirus y antispam ¡gratis!
>> Regístrate ya - http://correo.espanol.yahoo.com/
>>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Daniel Polvorin 2005-07-06 17:44:48 POSTGRESQL SOBRE WIN98
Previous Message Esteban Gutierrez 2005-07-06 17:04:32 Encriptacion en plpgsql