PostgreSQL-在对象内获取JSONB键/值对并返回它
此运算符PostgreSQL-在对象内获取JSONB键/值对并返回它,sql,postgresql,jsonb,Sql,Postgresql,Jsonb,此运算符?|返回布尔值。它只是检查字符串是否包含在字符串中 SELECT ids ?| '{100085,100087,100090,100091,100093,100095,100113, 100121,100126,100211,100213,100223,100324,100326}' FROM tableA |ids| {'100090':'123456789','100096':'987654321'} 它将返回true,因为id100090位于idsjsonb列中 问题是,有没
?|
返回布尔值。它只是检查字符串是否包含在字符串中
SELECT ids ?| '{100085,100087,100090,100091,100093,100095,100113,
100121,100126,100211,100213,100223,100324,100326}'
FROM tableA
|ids|
{'100090':'123456789','100096':'987654321'}
它将返回true,因为id100090
位于idsjsonb列中
问题是,有没有一种方法可以返回它找到的内容,而不仅仅是一个布尔值。返回它找到的匹配项的值,而不是true,例如返回
'123456789'
一种可能,有点复杂,但至少函数并返回使用这些键找到的所有值。如果您只想要一个,则需要限制:
SELECT * FROM
(SELECT '{"100090":"123456789","100096":"987654321"}'::jsonb ->>
unnest('{100085,100087,100090,100091,100093,100095,100113,100121,100126,100211,100213,100223,100324,100326}'::int[])::text AS result) AS x
WHERE result IS NOT NULL;
结果:
result
-----------
123456789
(1 row)
需要子选择,因为出于某种原因,尝试将IS NOT NULL添加到查询中,否则只会声明该列不存在。实际上,不必介意最后一个问题,它会按照我的需要工作。谢谢你。我什么都试过了。它可以是bigint而不是将其转换为文本吗?我试过了,但结果却是空列。