在postgres中用逗号分割字符串

时间:2017-01-12 05:22:52

标签: postgresql

我的postgres数据库中有一个表格,其中包含4个数字年份的字符串格式相互连接 -

rollno | year
-----------------------------------
00001  | 201220132014
-----------------------------------
00002  | 2013201420152016
-----------------------------------
00003  | 2015
-----------------------------------

我在postgres表中有上面的数据,我希望我的数据用逗号分隔,如下例所示:

rollno | year
-----------------------------------
00001  | 2012,2013,2014
-----------------------------------
00002  | 2013,2014,2015,2016
-----------------------------------
00003  | 2015
-----------------------------------

2 个答案:

答案 0 :(得分:1)

您可以将正则表达式(\d)(?=(\d{4})+$)\1,一起替换。

update yourTable
set year = regexp_replace(year, '(\d)(?=(\d{4})+$)', '\1,', 'g')

但是,此查询实际上是朝着错误的方向,因为它导致您的year列中包含CSV数据。相反,理想情况下,每年应该在一个单独的记录中,以保持数据库的标准化。

答案 1 :(得分:1)

试试这个

update tbl1
set vl = t.yr
from (
    select id
        ,string_agg(y, ',') yr
    from (
        select id
            ,unnest(regexp_split_to_array(vl, E '(?=(....)+$)')) y
        from tbl1
        ) s
    group by id
    ) t
where t.id = tbl1.id