【发布时间】:2021-07-27 14:49:45
【问题描述】:
我有一个包含以下数据的 jsonb 列:
{"oz": "2835", "cup": "229", "jar": "170"}
我有代表第一项“oz”的密钥号0。如何使用0 提取此值?
我在想类似的事情:
SELECT units->[0] as test
我只有密钥 ID 来引用这些数据。我没有键名“oz”。
【问题讨论】:
标签: sql postgresql jsonb
我有一个包含以下数据的 jsonb 列:
{"oz": "2835", "cup": "229", "jar": "170"}
我有代表第一项“oz”的密钥号0。如何使用0 提取此值?
我在想类似的事情:
SELECT units->[0] as test
我只有密钥 ID 来引用这些数据。我没有键名“oz”。
【问题讨论】:
标签: sql postgresql jsonb
听起来是个可怕的主意。但是你仍然可以创建一个函数来实现这个可怕的想法:
create function jsonb_disaster(jsonb,int) returns jsonb language SQL as $$
select value from jsonb_each($1) with ordinality where ordinality=1+$2
$$;
select jsonb_disaster('{"oz": "2835", "cup": "229", "jar": "170"}',0);
jsonb_disaster
----------------
"2835"
您也可以创建自己的运营商来结束这场灾难:
create operator !> ( function = jsonb_disaster, leftarg=jsonb, rightarg=int);
select '{"cup": "229", "jar": "170", "oz": "2835"}' !> 1;
?column?
----------
"229"
【讨论】: