如何将字符串列表分解为新的列



我在postgresql 14中有一个这样的表:

text                classes
some string         [food, drink]
another string      [food, medicine, drink]
another random      [car]

我想得到这个作为输出:

text                class_1   class_2  class_3
some string         food       drink      
another string      food     medicine   drink
another random      car

所以我想去掉[]并将每个字符串分解成列。

I am try:

select text, replace(replace(unnest(string_to_array(classes, ',')), '[', ' '),']','') from tbl

但是我在一行中得到每个类,这重复了文本列

还有,有没有干净的方法去除[]?

可以使用translate去掉方括号。然后使用split_part为每个元素获取一列:

select "text", 
split_part(translate(classes, '[]', ''), ',', 1) as class_1,
split_part(translate(classes, '[]', ''), ',', 2) as class_2,
split_part(translate(classes, '[]', ''), ',', 3) as class_3
from the_table;       

它是不是有可能使它动态。SQL语言的一个基本限制是,在数据库开始检索数据之前,必须知道所有结果列的数量、名称和数据类型。

相关内容

  • 没有找到相关文章

最新更新