You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL 11中如何从jsonb数组获取指定条件的start_at值

PostgreSQL 11 获取jsonb数组中order=0对象的start_at值

针对你的需求,在PostgreSQL 11中可以通过两种更直接的方式实现,无需复杂的聚合操作:

方法一:直接访问数组指定位置(适用于order=0的对象是数组第一个元素的场景)

如果可以确定tasks数组里order=0的对象始终是第一个元素(如你的数据样例),直接使用jsonb数组索引和字段提取操作符即可:

SELECT tasks->0->>'start_at' FROM requests WHERE id = 1;
  • tasks->0:获取tasks数组的第一个元素(jsonb对象)
  • ->>'start_at':提取该对象中start_at字段的文本值

方法二:过滤数组元素(适用于order=0的对象位置不确定的场景)

如果order=0的对象可能出现在数组任意位置,需要先展开数组元素再筛选:

SELECT elem->>'start_at'
FROM requests, jsonb_array_elements(tasks) AS elem
WHERE id = 1 AND elem->>'order' = '0';

如果存在多个order=0的对象,想要仅获取第一个匹配值,可以结合聚合函数:

SELECT (array_agg(elem->>'start_at'))[1]
FROM requests, jsonb_array_elements(tasks) AS elem
WHERE id = 1 AND elem->>'order' = '0';

说明

你之前尝试的语句使用了jsonb_agg(row_to_json(jb)),这是不必要的——因为你查询的是单条记录(id=1),直接操作tasks列即可,无需将整行数据转成JSON再聚合,反而增加了复杂度。

内容的提问来源于stack exchange,提问作者Kingsley Simon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 15:55:27