2010/10/12 Andreas <maps...@gmx.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 -- Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-sql