WHERE子句按条件过滤JSONB数组的任何元素?

时间:2018-04-24 10:46:30

标签: json postgresql jsonb

在PostgreSQL中,使用JSONB列,我可以存储值数组。在WHERE子句中,我可以通过对各个数组项进行比较来过滤这些数组。

作为示例,我可以使用data检查“是数组WHERE CAST((data -> 0) AS FLOAT) > 5的第一项,是否转换为大于5的数字?”

我希望能够做的是检查任何数组data的项目,转换为大于5的数字?”< / em>的

有没有办法在PostgreSQL查询中执行此操作,而不是首先获取所有数据然后手动执行此过滤器?

1 个答案:

答案 0 :(得分:4)

使用函数jsonb_array_elements_text(),示例:

with my_table (id, data) as (
values 
    (1, '[1,2,3]'::jsonb),
    (2, '[4,5,6]'::jsonb)
)

select *
from my_table
where exists (
    select 
    from jsonb_array_elements_text(data)
    where value::float > 5
    )

 id |   data    
----+-----------
  2 | [4, 5, 6]
(1 row)