You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL如何从JSON对象数组字段提取邮箱值并拼接为逗号分隔字符串

MySQL提取JSON数组内指定属性并拼接为逗号分隔字符串的实现方案

假设你的业务表名为your_table_name,存储JSON数组的字段为email_address_dump,可根据你的实际表名、字段名替换。

适用MySQL 8.0及以上版本(最优方案)

借助JSON_TABLE函数将JSON数组转为临时关系表,再通过GROUP_CONCAT拼接结果:

SELECT 
  GROUP_CONCAT(t.email SEPARATOR ', ') AS email_list
FROM 
  your_table_name,
  JSON_TABLE(
    email_address_dump,
    '$[*]' COLUMNS (
      email VARCHAR(255) PATH '$.value'
    )
  ) AS t
-- 可在此处添加原表的过滤条件,例如 WHERE id = 1001
GROUP BY your_table_name.id;
  • 说明:$[*]匹配JSON数组的所有元素,PATH '$.value'指定提取每个元素的value属性,SEPARATOR ', '控制最终拼接的分隔符和你要求的格式完全一致。

适用MySQL 5.7版本的兼容方案

如果暂时无法升级到8.0,可通过遍历数组下标的方式实现:

-- 先调大拼接长度限制,避免长列表被截断
SET SESSION group_concat_max_len = 102400;

SELECT 
  GROUP_CONCAT(
    JSON_UNQUOTE(JSON_EXTRACT(email_address_dump, CONCAT('$[', seq.idx, '].value')))
    SEPARATOR ', '
  ) AS email_list
FROM 
  your_table_name
  -- 数字序列的长度需要覆盖业务中JSON数组的最大长度,以下示例最多支持10个元素,可按需追加UNION
  JOIN (
    SELECT 0 AS idx UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
    UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
  ) AS seq
WHERE 
  seq.idx < JSON_LENGTH(email_address_dump)
-- 可在此处添加原表的过滤条件
GROUP BY your_table_name.id;
  • 说明:JSON_LENGTH先拿到数组的元素个数,通过下标的方式逐个提取value属性,JSON_UNQUOTE用于去掉提取结果自带的双引号。

内容的提问来源于stack exchange,提问作者chewie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:18:03