有没有一种方法可以分割字符串并重新组合值,如下面的Postgresql所示。
input_column
abc.1, xyz.1, abc.2, abc.3 xyz.3
result_column
abc{1,2,3}, xyz{1,3}
答案 0 :(得分:1)
您可以先将项目拆分为行,然后再聚合:
select code, array_agg(value) as values
from (
select split_part(item, '.', 1) as code,
split_part(item, '.', 2) as value
from the_table t
cross join regexp_split_to_table(t.input_column, '\s*,\s*') as x(item)
) t
group by code
order by code
我使用regexp_split_to_table()
而不是string_to_array()
和unnest()
来生成行,因此在逗号后处理空格。结合使用unnest()
和string_to_array()
,这将需要额外的trim()
,这会使内部查询更难阅读。