PostgreSQL查询jsonb字段指定属性返回null的问题求助
查询返回null的核心问题
- 你存储在
service_groups字段的jsonb内容根节点是json数组(以[]包裹),并非直接的键值对对象 - 原语句
service_groups->>'total_amount'是尝试从json根节点(即这个数组)中查找total_amount键,数组本身不存在该顶层键,因此查询结果返回null
修正后的查询语句
针对你给出的原始json结构(数组内仅1个带total_amount的元素),正确写法需要先取出数组中对应下标的元素,再提取字段值:
SELECT id, service_groups->0->>'total_amount' as pricing FROM data_table WHERE id = 'ef5d5366-f049-4d88-8f03-1f7c0faeeb8d'
补充说明
->0操作符的作用是从json数组中取出下标为0的第一个元素(也就是你存储的包含total_amount的对象)- 如果需要提取的是数值类型而非字符串,可以对结果做类型转换:
SELECT id, (service_groups->0->>'total_amount')::numeric as pricing FROM data_table WHERE id = 'ef5d5366-f049-4d88-8f03-1f7c0faeeb8d' - 如果后续数组内可能存在多个元素,可根据业务场景调整下标值,或配合
jsonb_array_elements函数展开数组后再提取字段
内容的提问来源于stack exchange,提问作者Joanne Chin
相关产品推荐
相关产品推荐

