选择像json值Postgresql

时间:2017-12-30 04:54:59

标签: json postgresql

我有一个表格,其中包含我想搜索的JSON数组数据。

CREATE TABLE data (id SERIAL, json JSON);

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

我希望选择此表中具有json列值的所有行在下面的字符串

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

';#abc.vn; #phattrien; #cds.gg;#'喜欢'%'+ json列中的值+'%'

1 个答案:

答案 0 :(得分:0)

首先,您可以将json数组项转换为多行:

SELECT id, json_array_elements(json) AS items FROM data

然后,您可以查询此临时表以查找所需记录的ID(||表示字符串连接):

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') || '%'

最后,在您知道ID之后,只需选择您想要的内容:

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') || '%'
)