我有一个表用户,其中一个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 域获取线路?
答案 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
)。