2017-07-31 57 views
0

我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"} 

我需要尋找匹配「約翰·史密斯」的記錄;因此,在這種情況下,ID - 1,2,4 我無法分隔每個鍵=>值對的搜索;我需要獲取連接的記錄條目以檢查傳入的請求。

我已經試過

select * from contacts where jsonb_concat(data->>'title'::TEXT || data->>'first'::TEXT || data->>'last'::TEXT) ilike "John smith"; 

這不工作,因爲我想Concat的值,而不是jsonb對象。有什麼辦法來連接鍵指定jsonb值?

回答

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

希望這可以幫助別人。