在PostgreSQL中,使用JSONB
列,我可以存储值数组。在WHERE
子句中,我可以通过对各个数组项进行比较来过滤这些数组。
作为示例,我可以使用data
检查“是数组WHERE CAST((data -> 0) AS FLOAT) > 5
的第一项,是否转换为大于5的数字?”。
我希望能够做的是检查“任何数组data
的项目,转换为大于5的数字?”< / em>的
有没有办法在PostgreSQL查询中执行此操作,而不是首先获取所有数据然后手动执行此过滤器?
答案 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)