我的postgres数据库中有一个表格,其中包含4个数字年份的字符串格式相互连接 -
rollno | year ----------------------------------- 00001 | 201220132014 ----------------------------------- 00002 | 2013201420152016 ----------------------------------- 00003 | 2015 -----------------------------------
我在postgres表中有上面的数据,我希望我的数据用逗号分隔,如下例所示:
rollno | year ----------------------------------- 00001 | 2012,2013,2014 ----------------------------------- 00002 | 2013,2014,2015,2016 ----------------------------------- 00003 | 2015 -----------------------------------
答案 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