postgresql 在jsonb列中的对象数组内进行IIKE查询

ckocjqey  于 2022-11-23  发布在  PostgreSQL
关注(0)|答案(2)|浏览(237)

我有一个由各种对象组成的jsonb数据列。

{"LicensePlates": {"Type": "LicensePlateList", "Value": ["XXXXX"]}, "SubscriptionInfo": {"Type": "SubscriptionInfoList", "Value": [{"id": "1", "lastname": "rossi", "firstname": "paola"}, {"id": "2", "lastname": "Scicolone", "firstname": "Paolo"}]}}

现在我在SubscriptionInfo键中搜索一个特定的信息,如下所示:

SELECT * FROM column WHERE (data -> 'SubscriptionInfo') -> 'Value' @> '[{"firstname": "Paolo"}]';

它工作正常,但我也想搜索“部分”信息,例如,搜索字符串“pa”(使用IIKE或其他类似的东西)应该返回整个记录。这可能吗?

esyap4oy

esyap4oy1#

您有两个选项(demo
1.将数据转换为小写

select * 
from 
  test 
where 
  lower(data -> 'SubscriptionInfo' ->> 'Value')::jsonb @> lower('[{"firstname": "paolo"}]')::jsonb;

1.使用交叉连接并提取JSON,然后使用ilike

select distinct on (t.id) t.*
from 
  test t
  cross join jsonb_array_elements(data -> 'SubscriptionInfo' -> 'Value') ej
where
  value ->> 'firstname' ilike '%paolo%';
thtygnil

thtygnil2#

如果您使用的是Postgres 13或更高版本,则可以使用SQL/JSON路径表达式:

select t.*
from the_table t
where t.data @@ '$.SubscriptionInfo.Value[*].firstname like_regex "paolo" flag "i"'

相关问题