我有jsonb数据:
id | data
1 | {"last": "smith", "first": "john", "title": "mr"}
2 | {"last": "smith jr", "first": "john", "title": "mr"}
3 | {"last": "roberts", "first": "Julia", "title": "miss"}
4 | {"last": "2nd", "first": "john smith", "title": "miss"}
我需要搜索与“John smith”匹配的记录;因此,在这种情况下ID - 1,2,4 我无法分开搜索每个键=>价值对;我需要获取记录的连接条目以检查传入的请求。
我试过了
select * from contacts where jsonb_concat(data->>'title'::TEXT || data->>'first'::TEXT || data->>'last'::TEXT) ilike "John smith";
这不起作用,因为我试图连接值而不是jsonb对象。有没有办法连接键指定的jsonb值?
答案 0 :(得分:0)
我通过一些研究自己解决了.. 我的查询就像 -
select * from contacts where trim(regexp_replace(CONCAT(data->>'title'::TEXT,' ',data->>'first'::TEXT,' ',data->>'last'::TEXT), '\s+', ' ', 'g')) ilike '%john%';
对于PostgreSQL版本> 9.1 ..你可以用'\ s +'代替'\ s +'。
希望这有助于某人。