- 数据表
CREATE TABLE `table_main` (
`ID` char(36) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
`zb_list_str` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci ,
`kf_list_str` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci,
PRIMARY KEY (`ID`) USING BTREE,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ;
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/59304d48bb3240478206d1dd4ae6b1fa.png)
- 一行变多行
SELECT
*
FROM
table_main,
JSON_TABLE (
JSON_EXTRACT( CONCAT( '["', REPLACE ( zb_list_str, ',', '","' ), '"]' ), '$' ),
'$[*]' COLUMNS (id FOR ORDINALITY, `zb` VARCHAR (255) PATH '$' )) AS t_zb JOIN
JSON_TABLE (
JSON_EXTRACT( CONCAT( '["', REPLACE ( kf_list_str, ',', '","' ), '"]' ), '$' ),
'$[*]' COLUMNS (id FOR ORDINALITY,`kf` VARCHAR (255) PATH '$' )) AS t_kf
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/ffc66ae89f5a49f3842a218bf6d3da3c.png)
- 步骤解释说明
- 用CONCAT() 和REPLACE () 将待拆分字符串str str_part1,str_part2,str_part3 拼成json数组格式的字符串json_array_str “[“str_part1”,“str_part2”,“str_part3”]”
- 用JSON_EXTRACT() 将json_array_str 转成 json_array
- 用JSON_TABLE () (对mysql 版本有要求) 将json_array渲染成一个表格(可以有多行)即可
- 其他
- 可以同时如此操作多个字段
- 每个字段拆分出来的表格(如t_zb)可像普通表格一样进行join等操作(示例中需要两张表的笛卡尔积)