从字符串sql中删除字符

时间:2016-09-20 15:19:04

标签: postgresql

我有一个包含这样的列的表:

-------------------------------
id      |         Tags
-------------------------------
1       | ['tag1','tag2']
2       | []
3       | ['tag1','tag3']

首先我想删除'['和']'字符然后我可以做这样的事情:

-------------------------------
id      |         Tags
-------------------------------
1       | 'tag1'
1       | 'tag2'
3       | 'tag1'
3       | 'tag3'

这些行来自我无法修改的API,我想要一个表格来加入标签和这个项目ID。 它甚至不是一个postgresql数组,因此我无法在循环中提取数据,我需要解析这个“数组”并进行左连接?在桌子上得到这个结果。 但我不知道如何正确提取数据

生成表格的代码:

CREATE TABLE sample (
"id" bigint,
"tags" text);

INSERT INTO "public"."sample"("id", "tags") VALUES(1,   '[''tag1'',''tag2'']') RETURNING "id", "tags";
INSERT INTO "public"."sample"("id", "tags") VALUES(2, '[]') RETURNING "id", "tags";
INSERT INTO "public"."sample"("id", "tags") VALUES(3, '[''tag1'',''tag3'']') RETURNING "id", "tags";

提前致谢

1 个答案:

答案 0 :(得分:1)

最好将您的列定义为text[]而不是text,以便它包含数组。

使用当前列定义的解决方法是将其强制转换为数组,然后使用unnest()

SELECT
  id,
  unnest(replace(replace(tags, '[', '{'), ']', '}')::text[])
FROM
  sample

给出:

 id | unnest
----+--------
  1 | 'tag1'
  1 | 'tag2'
  3 | 'tag1'
  3 | 'tag3'
(4 rows)