Re: Concatenar y q resultado no sea text

From: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
To: "Eduardo Arenas C(dot)" <edomax(at)gmail(dot)com>
Cc: Anthony <asotolongo(at)uci(dot)cu>, José Fermín Francisco Ferreras <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-13 13:55:04
Message-ID: 20130213135504.GC4546@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)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 Fernando Reyes 2013-02-13 18:24:16 Re: replicacion
Previous Message Eduardo Arenas C. 2013-02-13 13:35:40 Re: Concatenar y q resultado no sea text