2017-12-30 14 views
0

Ich habe eine Tabelle mit JSON-Array-Daten, die ich gerne suchen würde.Wählen Sie wie Json-Wert Postgresql

CREATE TABLE data (id SERIAL, json JSON); 

INSERT INTO data (id, json) 
    VALUES (1, '[{"login_name":"kiemthu"},{"login_name":"abc.vh"}]'); 

ich wählen will alle Zeilen in dieser Tabelle, den Wert von json Spalt in einer unter Zeichenfolge hat

;#abc.vn;#phattrien;#cds.gg;# 

'; # abc.vn; #phattrien; # cds.gg; #' wie '%' + Wert in json Spalte + '%'

Antwort

0

Erstens können Sie json Array-Elemente in mehrere Zeilen konvertieren:

SELECT id, json_array_elements(json) AS items FROM data 

Dann können Sie que ry diese temporären Tabellen-IDs von gewünschten Datensätze zu finden (|| bedeutet String-Verkettung):

SELECT DISTINCT id FROM 
    (SELECT id, json_array_elements(json) AS items FROM data) tmp 
WHERE 
    ';#abc.vn;#phattrien;#cds.gg;#' LIKE '%' || (tmp.items->>'login_name') || '%' 

Schließlich, nachdem Sie IDs wissen, wählen Sie einfach, was Sie wollen:

SELECT * FROM data 
WHERE id IN ( 
    SELECT DISTINCT id FROM 
     (SELECT id, json_array_elements(json) AS items FROM data) tmp 
    WHERE 
     ';#abc.vn;#phattrien;#cds.gg;#' LIKE '%' || (tmp.items->>'login_name') || '%' 
) 
+0

Vielen Dank, es ist genau das, was ich wollen –

Verwandte Themen