2016-10-10 76 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