我正在考虑在postgres jsonb数据类型中存储一些数据。会有像
这样的结构{"name": "Jhon Smith", "emails": ["smith@test.com", "agent@matrix.net"],
"phones": ["123456789", "987654321"]}.
我知道,我可以像
那样搜索这个结构where contact->'emails' @> '"smith@test.com"'::jsonb;
但我需要的是用一些LIKE运算符搜索我的数据,所以
where contact->'emails' <SOME_JSON_LIKE_OPERATOR> "smith"';
我无法找到psql是否有类似的东西,也许它没有。所以,也许我可以转换联系方式&gt;&#39;电子邮件&#39;字段到文本(&#39; [&#34; smith@test.com",&#34; agent@matrix.net"]&#39;)然后使用简单的LIKE ..你怎么样?已经解决了这个问题?
答案 0 :(得分:3)
您可以将json数组扩展为文本记录集,并以您喜欢的任何方式搜索:
where exists (
select 1 from json_array_elements_text(contact->'emails')
where
value like "%smith%"
)