我想在 Postgresql 中搜索记录。我有一个表和一个创建为文本数据类型的列(称为 A 列)。在 A 列中,我将数据保存为 JSON 数据类型。 例如:
ID A column
1 {"A1":["1"]}
2 {"A2":["2"], "B":["3"]}
我正在使用 Java 搜索数据。我的条件搜索是“A1”:[“1”,“2”]。 我怎样才能搜索到? 请帮我解决问题!
最佳答案
这样:
CREATE TEMP TABLE tab (ID int, "A column" text);
INSERT INTO tab VALUES
(1, '{"A1":["1"]}'),
(2, '{"A2":["2"], "B":["3"]}'),
(3, '{"A2":["1","2"], "B":["3"]}');
SELECT * FROM tab WHERE ("A column"::json->>'A2') = '["1","2"]';
只有当 "A column"
中的所有值都是正确格式化的 json 时,它才会起作用。否则,您必须使用一个函数来捕获转换异常并在它是无效的 json 值时返回 null。
更新
如果您希望所有字段都具有一个集合中的值,那么
SELECT * FROM tab
WHERE ARRAY(select json_array_elements_text("A column"::json->'A2')::text)
&& ARRAY['1','2'];
关于java - 如何在 Postgresql (Java) 中按 JSON 进行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37849036/