CASE(?) to write in a different column based on a string pattern

From: Moreno Andreo <moreno(dot)andreo(at)evolu-s(dot)it>
To: PostgreSQL mailing lists <pgsql-general(at)postgresql(dot)org>
Subject: CASE(?) to write in a different column based on a string pattern
Date: 2019-11-13 16:24:40
Message-ID: 5bbe8366-bcd4-7f6f-94c8-ebc465c3b6b7@evolu-s.it
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi,
    I need to create a CASE (I think) statement to check for a string
pattern, and based on its value, write a substring in a different column
(alias).
I'm trying to create a COPY statement to port a table into antoher
database, which has a table with another format (that's why the aliases)

Let's write it in pseudoSQL:

given this

select pattern from tbl;
pattern
----------
foo1234
bar5678
baz9012

That's what I'm trying to achieve

select
    pattern,
        CASE when pattern like 'foo%' then ltrim(pattern, 'bar') as foo
                  when pattern like 'bar%' then ltrim(pattern, 'bar')
as bar
                  when pattern like 'baz%' then ltrim(pattern, 'baz')
as baz
        END
from tbl;

|foo   |bar  |baz |
 1234
            5678
                        9012
(hoping text formatting is ok... 1234 should go in column foo, 568 in
bar and 9012 in baz)

Is it possible?

Thanks in advance
Moreno.-

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Geoff Winkless 2019-11-13 16:36:43 Re: CASE(?) to write in a different column based on a string pattern
Previous Message Tom Lane 2019-11-13 14:41:08 Re: here does postgres take its timezone information from?