搜索由键指定的jsonb连接值

时间:2017-07-31 19:06:47

标签: postgresql concatenation jsonb

我有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值?

1 个答案:

答案 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 +'。

希望这有助于某人。