开发者社区> 问答> 正文

postgresql json 字段值为数组,怎么查询数组包含指定元素的数据?

postgresql json 字段值为数组,怎么查询数组包含指定元素的数据?
json 的格式:{"a":"test","b":[1,2,3,4]}
我想查询所有 b 字段包含了 2 的数据,请问有什么方法可以做到呢?

展开
收起
OSC开源社区 2024-06-15 22:52:53 336 0
1 条回答
写回答
取消 提交回答
  • 在 PostgreSQL 中,如果你有一个 JSONB 类型的字段,比如 data,并且这个字段包含一个数组,你可以使用 @> 操作符来检查 JSONB 数组是否包含特定的元素。对于你的例子,查询可以写成:

    SELECT *
    FROM your_table
    WHERE data -> 'b'::jsonb @> '[2]'::jsonb;
    

    这里,data -> 'b' 会获取 data 字段中的 b 键对应的值,将其转换为 JSONB 类型,然后 @> 检查这个数组是否包含值为 2 的元素。

    请注意替换 your_table 为你的实际表名。如果 b 键对应的不是数组,而是字符串或其他非数组类型,查询将会失败,因此确保 b 的值确实是一个 JSONB 数组。

    如果你的 JSON 字段是普通的 JSON 类型而不是 JSONB,你需要先将它转换为 JSONB,因为 @> 操作符只适用于 JSONB 类型。转换可以使用 ::jsonb

    SELECT *
    FROM your_table
    WHERE (data::jsonb) -> 'b' @> '[2]'::jsonb;
    

    这将确保即使 data 是 JSON 类型,也能正确地进行数组成员检查。

    2024-06-16 08:28:58
    赞同 1 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PostgreSQL 物联网六脉神剑 立即下载
PostgreSQL在哈啰的实践-周飞 立即下载
PostgreSQL高并发数据库应用数据 立即下载