2016-09-20 7 views
0

Ich habe eine Tabelle einige Spalten wie folgt enthalten:entfernen Zeichen aus einem String sql

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

Zuerst ich möchte entfernen, um die ‚[‘ und ‚]‘ Zeichen dann könnte ich etwas tun, wie folgt aus:

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

die Zeilen stammen aus einer API, die ich noch nicht ändern können, und ich möchte eine Tabelle tun, dass die Tags und dieses Produkt-ID verbinden würde. Es ist nicht einmal ein Postgresql-Array, also kann ich die Daten nicht innerhalb einer Schleife extrahieren, ich muss dieses "Array" analysieren und eine Linke Join machen? auf dem Tisch, um dieses Ergebnis zu erhalten. Aber ich weiß nicht, wie die Daten richtig auf den Tisch

-Code zu extrahieren, zu generieren:

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

Dank voraus sein Es wäre

+0

Bitte ** [Bearbeiten] ** Ihre Frage ein und fügen Sie die 'create table'-Anweisung für die fragliche Tabelle. –

Antwort

1

besser Ihre Spalt als text[] statt text zu definieren so dass es ein Array enthält.

Die Abhilfemaßnahme die aktuelle Spaltendefinition ist es zu einer Reihe zu werfen und dann verwenden unnest()

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

gibt:

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

funktioniert als ein Charme, danke – TLR

Verwandte Themen