我有一个表格,其中包含我想搜索的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列中的值+'%'
答案 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') || '%'
)