2016-10-10 84 views
1

我有一個表用戶帶有一個JSON字段user_data。 實施例這3行:postgresql在LIKE運算符中選擇json數組中的行

{"name": "John", domain_names: ['john.com', 'lennon.com', 'john.fr']} 
{"name": "Foo", domain_names: ['foo.com', 'bar.fr', 'bar.com']} 
{"name": "Tirion", domain_names: ['tirion.co.uk']} 

我想要得到JSON線與一個或多個.COM酒莊名稱(前兩行)。 我嘗試這樣做:

SELECT user_data 
FROM user 
WHERE json_array_elements(user_data)->>'domain_names' LIKE '%.com'; 

,但它不工作... 你知道一種方式來獲得與.COM域名行?

+0

如果使用標準化數據模型,這將非常簡單。 –

+0

是的,但原始數據更復雜:) – jedema

回答

2
SELECT user_data 
FROM "user" u 
WHERE EXISTS 
     (SELECT 1 
      FROM jsonb_array_elements_text(u.user_data->'domain_names') x(dom) 
      WHERE dom LIKE '%.com'); 

順便說一句,你應該避免命名錶像保留字(在這種情況下user)。

+0

謝謝:)它的工作原理。 – jedema