0

我的 PostgreSQL 数据库包含一个列,该列是一个文本字符串,它采用唯一但不可预测的值,如下所示:

id    var
1     "A", "B"
2     "B", "C"
3     "C", "A"
4     "eggs", "toast"
5     "eggs", "bacon"

我需要一个 SQL 查询来提取唯一值var,就像这样......

1 A
2 B
3 C
4 bacon
5 eggs
6 toast

...但我对 SQL 中的文本内容不太熟悉。帮助?

4

1 回答 1

0

您可以使用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 上的演示

于 2020-10-29T14:54:49.960 回答