如何获取和比较Postgres中jsonb数组的元素?

时间:2016-11-18 22:15:14

标签: arrays postgresql jsonb

Postgres 9.6.1


    CREATE TABLE "public"."test" (
    "id" int4 NOT NULL,
    "packet" jsonb,
    )
    WITH (OIDS=FALSE)
    ;

Jsonb


    {"1": {"end": 14876555, "quantity":10}, "2": {"end": 14876555, "quantity":10} }


    [{"op": 1, "end": 14876555, "quantity": 10}, {"op": 2, "end": 14876555, "quantity": 20}]

所有检索数组的尝试都会导致错误: 无法从对象中提取元素

有必要比较所有元素" end" < 1490000并找到id。

" op":1或" 1":变量值和完整路径不适合解决方案

1 个答案:

答案 0 :(得分:0)

如果您没有商定的JSON结构,最好的解决方案IMO就像

select *
from
  public.test,
  regexp_matches(packet::text, '"end":\s*(\d+)', 'g') as e(x)
where
  x[1]::numeric < 1490000;