我在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语言的一个基本限制是,在数据库开始检索数据之前,必须知道所有结果列的数量、名称和数据类型。