您可以使用regexp_split_to_table()
拆分这些 CSV 字符串,然后只保留不同的值
select distinct x.str
from mytable t
cross join lateral regexp_split_to_table(t.var, ', ') x(str)
如果您确实在 CSV 元素周围有双引号,并且您想从结果中删除它们,那么:
select distinct replace(x.str, '"', '') str
from mytable t
cross join lateral regexp_split_to_table(t.var, ', ') x(str)
为了好玩,我们还可以使用 json: 将字符串用方括号括起来使它们成为有效的 json 数组字符串,然后我们可以用jsonb_array_elements_text()
它来取消嵌套(好处是它在后台为我们处理取消引用):
select distinct x.str
from mytable t
cross join lateral jsonb_array_elements_text( ('[' || t.var || ']')::jsonb) x(str)
DB Fiddle 上的演示