2016-09-20 171 views
0

我有一个包含一些像这样的表:从SQL字符串的字符删除

------------------------------- 
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"; 

在此先感谢

+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) 
+0

作品魅力,谢谢 – TLR