postgresql用LIKE运算符选择json数组中的行

时间:2016-10-10 13:43:14

标签: json postgresql

我有一个表用户,其中一个JSON字段 user_data 。 示例这3行:

{"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']}

我想获得带有一个或多个 .com 域名的JSON行(前两行)。 我试过这个:

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

但它不起作用...... 您是否知道如何通过 .com 域获取线路?

1 个答案:

答案 0 :(得分: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)。