1

我有一列包含 JSON 数组。数组是这样的(表用户,列 user_info):

[
 {"email":"xyz@hotmail.com","user_key":"987654","name":"John Paul"},
 {"email":"abc@hotmail.com","user_key":"123456","name":"Tom Sawyer"},
 {"email":"1234@msn.com","user_key":"887645","name":"Bart Simpson"}
]

有些在每个数组中有 3 个对象,有些有 20 个,有些介于两者之间。我想从数组中提取每个“名称”值。因此,对于上面的示例,我希望我的查询结果显示:

John Paul
Tom Sawyer
Bart Simpson

我可以这样做:

SELECT json_extract(users.user_info, '$[0]."name"', $[1]."name"', $[2]."name"')
FROM users

但是,如果我想选择所有这些,无论该列的每一行的长度如何,我将如何处理这样我就不必列出数组的每个对象编号?

4

1 回答 1

0

您需要表值函数 json_each()

SELECT json_extract(json_each.value, '$.name') name
FROM users u, json_each(user_info)

如果您想要逗号分隔列表中每行的所有名称,您可以使用GROUP_CONCAT()

SELECT GROUP_CONCAT(json_extract(json_each.value, '$.name')) name
FROM users u, json_each(user_info)
GROUP BY u.thread_id

请参阅演示

于 2021-07-12T20:30:54.917 回答