Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL按唯一值筛选文本字符串_Sql_Postgresql_Csv_Unnest - Fatal编程技术网

SQL按唯一值筛选文本字符串

SQL按唯一值筛选文本字符串,sql,postgresql,csv,unnest,Sql,Postgresql,Csv,Unnest,我的PostgreSQL数据库包含一个列,该列是一个文本字符串,具有唯一但不可预测的值,如下所示: id var 1 "A", "B" 2 "B", "C" 3 "C", "A" 4 "eggs", "toast" 5 "eggs", "bacon"

我的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中的文本内容不是很有经验。帮助?

您可以使用
regexp\u split\u to\u 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)