【问题标题】:How to search by JSON in Postgresql (Java)如何在 Postgresql (Java) 中按 JSON 搜索
【发布时间】:2016-06-16 02:44:14
【问题描述】:

我想在 Postgresql 中搜索记录。我有一个表,并且有一列被创建为文本数据类型(称为 A 列)。在 A 列中,我将数据保存为 JSON 数据类型。 例如:

ID             A column
1              {"A1":["1"]}
2              {"A2":["2"], "B":["3"]}

我正在使用 Java 来搜索数据。我的条件搜索是“A1”:[“1”,“2”]。 我怎样才能搜索? 请帮我解决问题!

【问题讨论】:

  • 你是如何使用java搜索数据的?为什么不使用 SQL? SELECT * FROM table WHERE ("A column"->'A1') = '["1", "2"]'::json
  • 'A column' 数据类型是文本。当我在 SQL 上运行时,我收到一条错误消息:运算符不存在:文本 -> 未知。
  • 您可以将其转换为 JSON:SELECT * FROM table WHERE ("A column"::json->'A1') = '["1", "2"]'::json
  • 哦,不。还有错误-> 错误:运算符不存在:json = json
  • 哦,是的,我忘了。这样SELECT * FROM table WHERE ("A column"::json->>'A1') = '["1", "2"]'

标签: java postgresql search text


【解决方案1】:

这边:

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'];

【讨论】:

  • 哦。非常感谢。但我希望在运行查询SELECT * FROM tab WHERE ("A column"::json->>'A2') = '["1","2"]'; 时,结果将是 ID 1、2 和 3。现在只返回 ID = 3 的记录。
猜你喜欢
  • 2021-09-27
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
  • 1970-01-01
  • 2017-08-31
相关资源
最近更新 更多