【发布时间】:2021-05-16 07:09:12
【问题描述】:
我有一个如下所示的 jsonarray
[{"key1":10},{"key1":20},{"key1":30}]
我想获取所有指定条件的json对象。说获取 key1 小于 25 的所有 json 对象。所以我的 sql 查询应该返回这个列表
[{"key1":10},{"key1":20}]
生成的 SQL 查询是什么。
【问题讨论】:
标签: sql arrays json postgresql jsonb
我有一个如下所示的 jsonarray
[{"key1":10},{"key1":20},{"key1":30}]
我想获取所有指定条件的json对象。说获取 key1 小于 25 的所有 json 对象。所以我的 sql 查询应该返回这个列表
[{"key1":10},{"key1":20}]
生成的 SQL 查询是什么。
【问题讨论】:
标签: sql arrays json postgresql jsonb
SELECT
json_agg(elements) -- 3
FROM mytable,
json_array_elements(mydata) as elements -- 1
WHERE (elements ->> 'key1')::int < 25 -- 2
->> 返回类型 text,因此您需要将其转换为类型 int
【讨论】:
jsonb,而不是您在问题中写的json。那么,在这种情况下,你需要jsonb_agg() 而不是json_agg() 以及jsonb_array_elements 而不是json_array_elements
如果您使用的是 Postgres 12 或更高版本,则可以使用 JSON 路径函数:
select jsonb_path_query_array(the_column, '$[*] ? (@.key1 <= 25)')
from the_table
【讨论】: