From: | Osvaldo Kussama <osvaldo(dot)kussama(at)gmail(dot)com> |
---|---|
To: | Andreas <maps(dot)on(at)gmx(dot)net> |
Cc: | pgsql-sql(at)postgresql(dot)org |
Subject: | Re: Is there a conditional string-concatenation ? |
Date: | 2010-10-12 05:03:41 |
Message-ID: | AANLkTikZZPYGOVB_JJn5ZEFfEb7J=BQiLLJJRW9LL81c@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
2010/10/12 Andreas <maps(dot)on(at)gmx(dot)net>:
> Hi,
> Is there a conditional string-concatenation ?
>
> I'd like to have an elegant way to connect 2 strings with some 3rd element
> between only if there really are 2 strings to connect.
>
> e.g.
> MyCat ( 'John', '_', 'Doe' ) --> 'John_Doe'
> while
> MyCat ( 'John', '_', '' ) --> 'John'
> MyCat ( '', '_', 'Doe' ) --> 'Doe'
> MyCat ( '', '_', '' ) --> NULL
>
> It should treat NULL and '' equally as empty
> and it should trim each of the 3 elements.
>
> so
> MyCat ( ' John ', '_', NULL ) --> 'John'
> MyCat ( 'John', NULL, 'Doe' ) --> 'JohnDoe'
>
Try:
bdteste=# SELECT nullif(ltrim(rtrim(coalesce(c1,'') || coalesce(c2,'')
|| coalesce(c3,''),' _'),' _'),'')
bdteste-# FROM (VALUES ('John', '_', 'Doe'),('John', '_', ''),('',
'_', 'Doe'),('', '_', ''),(' John ', '_', NULL),('John',
NULL, 'Doe')) AS foo(c1,c2,c3);
nullif
----------
John_Doe
John
Doe
John
JohnDoe
(6 rows)
Osvaldo
From | Date | Subject | |
---|---|---|---|
Next Message | Viktor Bojović | 2010-10-12 07:10:06 | Re: get attribute from XML |
Previous Message | Joshua Tolley | 2010-10-12 04:18:22 | Re: Is there a conditional string-concatenation ? |