选择像json值Postgresql

问题描述 投票:0回答:1

我有一个表,我想搜索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列中的值+'%'

json postgresql
1个回答
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') || '%'
)
© www.soinside.com 2019 - 2024. All rights reserved.