我在postgres db中有一个jsonb列。我需要查询存储在列中的json中是否存在特定键“ssn”。此键不是顶级键,而是嵌套的。我写了一个类似于下面的查询,但似乎没有找到合适的列 -
select * from application where content ? 'ssn';
当我使用顶级键运行上述查询时,它可以正常工作。
{
"name":"bob",
"business":{
"ssn":"XXXXXXXX",
}
}
答案 0 :(得分:1)
如果你知道ssn键的所有可能位置,你可以使用查询:
select *
from application
where content #> '{business,ssn}' is not null
or content #> '{whatever,deep,ssn}' is not null;
答案 1 :(得分:1)
使用extract-element-at-path运算符#>>
并检查给定路径的值是否为null。
示例:
WITH test(col) AS (
SELECT UNNEST(
ARRAY['{"name": "bob", "business": {"ssn": "abcd"}}'::jsonb,
'{"name": "jen", "business": {"ssn": "1234"}}',
'{"name": "kay", "nonprofit": {"no-ssn": "no-ssn"}}'
'{"name": "todd", "business": {"no-ssn": "no-ssn"}}']
))
SELECT * FROM test
WHERE col#>>'{business, ssn}' IS NOT NULL
答案 2 :(得分:0)
select * from application
where content::text like '%"ssn":%';