我有一个带有denom_qty jsonb列的abcs表。存储的值的格式是
{"100"=>5, "1000"=>2}
我想过滤所有denom_qty colum有key >=给定值的行,比如100。
我知道,如果数据的存储格式为
{ "denomination" => 100, "quantity" => 2}. 然后我发现了多个答案。但由于现在数据结构不能改变,我如何查询所有denom_qty列的键大于100的行?
我认为你可以创建一个基于json键值的函数,并检查是否有键大于100.Eg.。
create function jsonkey( inpt jsonb)
returns jsonb
LANGUAGE 'plpgsql'
COST 100
VOLATILE
AS $BODY$
DECLARE
keyobj text[];
BEGIN
select array_agg(a.data) from(select jsonb_object_keys('{"100":5, "1000":2, "5":41}'::jsonb) as data )a into keyobj;
For i in select (keyobj)
LOOP
if(i >=100) THEN
return '{"100":5, "1000":2, "5":41}'::jsonb->>i;
ELSE
return '{}'::josnb;
END IF;
END LOOP;
END;
$BODY$;
希望这个帮助。