Re: Concatenar y q resultado no sea text

From: "Eduardo Arenas C(dot)" <edomax(at)gmail(dot)com>
To: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
Cc: Anthony <asotolongo(at)uci(dot)cu>, José Fermín <josefermin54(at)hotmail(dot)com>, Lista PostgreSQL <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Concatenar y q resultado no sea text
Date: 2013-02-15 17:56:28
Message-ID: CAEe4h9p3swk_mgAo6rZHY881GDH94ZyyDFZX1T0OLgo-5uMZww@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Alvaro,

Tienes razón esto genera blancos innecesarios, hice la prueba en los case
pero resultó un poco mas complejo, ya que en el sistema que que manejo la
lista de personas tiene los atributos nombre, apellido materno y apellido
materno separados entonces realizar todas las combinaciones en un case es
mas complicado. Ahora hice una ajuste a lo que tengo agregando la función
btrim a cada atributo y a toda la cadena final para tratar de eliminar los
blancos y me fue bien, lo comparto a continuación:

select btrim((btrim(coalesce(nombre,' '))||' '||btrim(coalesce(apellido1,'
'))||' '||btrim(coalesce(apellido2,' ')))) from personas

saludos

eduardo

El 13 de febrero de 2013 10:55, Alvaro
Herrera<alvherre(at)2ndquadrant(dot)com>escribió:

> Eduardo Arenas C. escribió:
> > José
> >
> > Quería agregar que tengas cuidado si alguno de los atributos nombre o
> > apellido tienes valor nulo ya que al concatenar, la expresión completa
> va a
> > salir nula. Es decir si por ejemplo tienes
> >
> > codigo | nombre | apellido
> > ---------------------------------------------------
> > 1 | eduardo | null
> >
> > al concatenar nombre y apellido el resultado va a ser nulo.
> >
> > Para evitar esto yo utilizo la función coalesce
> >
> > select codigo, (coalesce(nombre,' ')||' '||coalesce(apellido,' ')
> > )::varchar(40) as personas
> > from persona
>
> Es buena acotación, pero la implementación tiene el problema de que
> quedan espacios extra cuando los campos son nulos. Si ambos campos son
> nulos, terminas con tres espacios en blanco! Yo consideraría usar CASE
> para evitar ese problema:
>
> select case when nombre is null then apellido
> when apellido is null then nombre
> else nombre || ' ' || apellido
>
> (Si usas '' en vez de ' ' en coalesce quedaría un solo espacio extra).
>
> --
> Álvaro Herrera http://www.2ndQuadrant.com/
> PostgreSQL Development, 24x7 Support, Training & Services
>

--
Eduardo Arenas Castillo.
Jefe Unidad de Gestión de Información
Ancora UC - Red de Centros de Salud Familiar
of. + 56 2 587 93 03 - cel. +56 9 6629 1618

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jose David Verbel Tous 2013-02-15 23:17:30 Problemas con VACUUM
Previous Message Gilberto Castillo 2013-02-14 15:25:42 Re: replicacion