0

在 postgres 中搜索嵌套的 jsonb 列时,我们可以像这样进行全文搜索:

SELECT * FROM search_test u
WHERE items @? '$.** ? (@ like_regex "35" flag "i")';

这将返回表中所有在 items jsonb 列中具有包含“35”的字符串值的行。

但是我们如何在这个查询中包含数字数据类型呢?例如,如果 items 列具有此值:

{"id": "15351", "nid": 15751 }

我们如何在查询中包含数字数据类型,以便我们从中得到结果:

SELECT * FROM search_test u
WHERE items @? '$.** ? (@ like_regex "75" flag "i")';

试图寻找转换选项,但到目前为止我发现的唯一解决方案是创建一个附加列,其中将数字值存储为字符串,然后搜索这两列。

这是一个示例小提琴: https ://dbfiddle.uk/?rdbms=postgres_13&fiddle=e5929ddbcf69ae3704da932b61a7d153

4

2 回答 2

0

您需要提取所有键/值对,然后使用 EXISTS 条件对每个值应用 LIKE 条件:

select s.*
from search_test s
where exists (select * 
              from jsonb_each_text(s.items) as x(k,v)
              where x.v like '%35%');
于 2021-09-20T15:46:47.743 回答
-2

这是你想要的:

SELECT *
FROM   search_test u
WHERE  items::text like '%75%';
于 2021-09-20T15:36:55.027 回答