PostgreSQL JSONB数组查询:如何获取值20?现有语句返回null
PostgreSQL JSONB获取数组对象中age值的正确查询方式
你当前的查询语句返回null,是因为PostgreSQL的->操作符不支持a.*.age这种通配符路径语法,->仅能识别单一键名或数组索引,无法遍历数组元素。
以下是几种正确的查询表达式:
- 使用
jsonb_path_query(PostgreSQL 12及以上版本支持),支持路径表达式遍历数组:
SELECT jsonb_path_query('{"a": [{"age":10}]}'::jsonb, '$.a[*].age');
该语句会返回数组中所有对象的age值,若数组包含多个对象,会返回多行结果。
- 若确定数组仅有一个元素,可通过数组索引直接访问:
-- 返回jsonb类型的age值 SELECT ('{"a": [{"age":10}]}'::jsonb->'a'->0->'age'); -- 返回文本类型的age值 SELECT ('{"a": [{"age":10}]}'::jsonb->'a'->0->>'age');
- 使用
jsonb_array_elements展开数组后提取值:
SELECT elem->>'age' FROM jsonb_array_elements('{"a": [{"age":10}]}'::jsonb->'a') AS elem;
内容的提问来源于stack exchange,提问作者David542
相关产品推荐
相关产品推荐

