Re: Ayuda de IF() de MySQL a CASE en PostgreSQL

From: Carlos Enrique Perez <carlos(dot)perez(at)syswarp(dot)com(dot)ar>
To: Jaime Soler <jaime(dot)soler(at)gmail(dot)com>, Emanuel Calvo <3manuek(at)gmail(dot)com>
Cc: Juan Francisco Giménez Silva <juanfgs(at)openmailbox(dot)org>, pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Ayuda de IF() de MySQL a CASE en PostgreSQL
Date: 2017-02-20 14:47:25
Message-ID: 1487602045.4637.2.camel@syswarp.com.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Si el Case lo tenes en el select, el group by debe repetir el Case
tambien.... algo que probablemente tire la performance de tu consulta
si la misma se hace sobre muchos datos.
El lun, 20-02-2017 a las 15:33 +0100, Jaime Soler escribió:
> Para migrar base de datos de mysql/oracle a postgresql te aconsejo
> revises la aplicación ora2pg. En el caso de los IF dentro de pl, la
> solución que implementan es:
> https://github.com/darold/ora2pg/blob/master/lib/Ora2Pg/PLSQL.pm#L163
> 4
>
> $str =~ s/\bIF\(\s*([^,]+)\s*,\s*([^,]+)\s*,\s*([^\)]+\s*)\)/(CASE
> WHEN $1 THEN $2 ELSE $3 END)/igs;
>
> Para poderte ayudar más con tu error concreto, necesaría ver cuál es
> la consulta que quieres migrar y parte de la definición de las
> tablas/vistas relacionadas.
>
>
>
> El 21 de noviembre de 2016, 20:05, Emanuel Calvo <3manuek(at)gmail(dot)com>
> escribió:
> > Algo escribí hace un tiempo acerca de iif en postgres:
> > https://wiki.postgresql.org/wiki/Simulating_iif_function.
> >
> > Con respecto al GROUP BY, si, tienes que ser explícito en el orden
> > que
> > quieres que se agrupen todas las columnas.
> >
> > El día 18 de noviembre de 2016, 11:41, Juan Francisco Giménez Silva
> > <juanfgs(at)openmailbox(dot)org> escribió:
> > > Hola,
> > >
> > > Estoy migrando los modelos de un software propietario que esta en
> > MySQL
> > > a PostgreSQL. Me he topado con un pequeño problema, en el que se
> > esta
> > > utilizando la función IF de MySQL de la siguiente manera
> > > IF(condicion,resultado1,resultado2) lo cual he transcripto a
> > >
> > >
> > > CASE
> > >  WHEN '' = wc."title"
> > >  THEN
> > >   TRIM( c."name" )
> > >  ELSE wc."title"
> > > END AS title
> > >
> > > El problema es que me da el siguiente error:
> > >
> > > column "wc.title" must appear in the GROUP BY clause or be used
> > in an
> > > aggregate function
> > >
> > > Si añado esa columna a GROUP BY me empieza a pedir sucesivamente
> > que
> > > añada wc.content y otras columnas de la tabla, por lo cual
> > deduzco que
> > > me debo estar equivocando en algo más.
> > >
> > > Agradecería si me pueden ayudar un poco con esto.
> > >
> > >
> > > Saludos!!
> > >
> > > -
> > > Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postg
> > resql.org)
> > > Para cambiar tu suscripción:
> > > http://www.postgresql.org/mailpref/pgsql-es-ayuda
> >
> >
> >
> > --
> > --
> > Emanuel Calvo
> > Sr. Technical Services at Percona
> > Team Building at Ayres.io
> >
> > -
> > Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgre
> > sql.org)
> > Para cambiar tu suscripción:
> > http://www.postgresql.org/mailpref/pgsql-es-ayuda
> >

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2017-02-20 15:22:20 Re: Ayuda de IF() de MySQL a CASE en PostgreSQL
Previous Message Jaime Soler 2017-02-20 14:33:10 Re: Ayuda de IF() de MySQL a CASE en PostgreSQL