【问题标题】:How to select a specific attribute from Postgres JSONB column如何从 Postgres JSONB 列中选择特定属性
【发布时间】:2022-11-03 22:45:19
【问题描述】:

我将 JSON 存储在 jsonb 列中:

[
  {
    "ORDER_TYPE": "foo",
    "PAYMENT_TYPE": "VISA",
  }
]

我可以很好地查询,但是否可以从结果集中选择 json 的特定部分(PAYMENT_TYPE)?

SELECT PAYMENT_TYPE 
FROM tools.orders 
WHERE responsejsonb::jsonb @> '[{"ORDER_TYPE":"foo"}]';

所需输出“PAYMENT_TYPE”:“VISA”或“VISA”

【问题讨论】:

  • edit您的问题并向我们展示所需的输出。
  • 为什么responsejsonb 列没有定义为jsonb

标签: postgresql


【解决方案1】:

首先展平 JSONB 数组。

select j ->> 'PAYMENT_TYPE' as payment_type -- and other expressions?
from tools.orders
cross join lateral jsonb_array_elements(responsejsonb::jsonb) as l(j)
where j ->> 'ORDER_TYPE' = 'foo';

编辑
但是,如果 responsejsonb 数组只有一个元素(或只有第一个元素很重要),那么它更简单,您需要的表达式是 responsejsonb::jsonb->0->>'PAYMENT_TYPE'

SELECT responsejsonb::jsonb->0->>'PAYMENT_TYPE'
FROM tools.orders 
WHERE responsejsonb::jsonb @> '[{"ORDER_TYPE":"foo"}]';

【讨论】:

  • 最好使用@> 运算符。
  • @LaurenzAlbe 它的实施速度更快还是口味问题? j @> '{"ORDER_TYPE": "foo"}'?
猜你喜欢
  • 2022-01-06
  • 1970-01-01
  • 2021-02-28
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
  • 2021-01-08
  • 1970-01-01
相关资源
最近更新 更多