如何在MariaDB中拆分字符串列 实现JSON数组元素逐行显示
MariaDB拆分JSON数组实现作者单行展示方案
MariaDB 10.2及以上版本自带完整JSON处理函数,不需要重新导入文件,直接通过SQL就能实现每个作者单独换行的效果。
场景1:仅查询时格式化输出换行效果
直接用JSON_TABLE拆分JSON数组为多行,再拼接指定换行符即可,代码如下:
-- 作者数量较多时先执行,避免拼接内容被截断 SET SESSION group_concat_max_len = 10240; SELECT GROUP_CONCAT(single_author SEPARATOR '\n<br />\n') AS product_author_formatted FROM JSON_TABLE( product_author, '$[*]' COLUMNS (single_author VARCHAR(255) PATH '$') ) AS author_list;
- 逻辑说明:
JSON_TABLE会遍历存储的作者JSON数组,把每个数组元素拆成独立的单行数据,再通过GROUP_CONCAT用指定换行符\n<br />\n把所有作者名拼接起来,输出结果和预期格式完全一致。 - 调整提示:如果是纯文本场景不需要HTML换行标签,直接把分隔符改成
'\n'即可。
场景2:需要把作者拆分为独立行长期存储
如果不只是临时展示,而是要遵循数据库设计范式把每个作者拆成单独记录存储,可以按以下方式操作:
- 先创建作者和商品的关联表
CREATE TABLE product_author_mapping ( product_id BIGINT NOT NULL, -- 替换为你原商品表的主键字段 author_name VARCHAR(255) NOT NULL );
- 把拆分后的作者数据插入关联表
INSERT INTO product_author_mapping (product_id, author_name) SELECT id, -- 替换为你原商品表的主键字段名 single_author FROM your_product_table -- 替换为你存储product_author字段的原表名 JOIN JSON_TABLE( product_author, '$[*]' COLUMNS (single_author VARCHAR(255) PATH '$') ) AS author_list;
操作完成后直接查询关联表,就能得到每个作者单独占一行的结果,后续做作者筛选、关联统计都会更方便。
注意:MySQL Workbench的结果网格默认不会渲染文本内的换行符,如果要在Workbench里直接看到换行效果,可以点击结果面板的「Formatted」查看模式,或者导出结果文件后就能看到正常的换行排版。
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

