- 实现的目标是 将 例如 1,2,3,4,5,6 的行信息转成列
- 建立基数表,用来计算逗号的位数,固定的字典表,一次创建以后就可以不用管了
CREATE TABLE `t_split_num` ( `id` int(19) NOT NULL, `num` int(19) DEFAULT NULL, PRIMARY KEY (`id`) )
-
循环插入4000条记录,执行下面语句创建过程
delimiter // create procedure splittest() begin declare num int; set num=1; while num < 4000 do insert into t_split_num(id, num) values(num, num); set num=num+1; end while; end //
-
执行过程插入数据到表中,效果如下
-
在SQL中执行以下语句分割字符串,完成!
SELECT substring_index( substring_index( t.split_column, ',', b.num ), ',', - 1 ) col FROM (select '1,2,3,4,5,6' as split_column) t JOIN t_split_num b ON b.num <= ( LENGTH(t.split_column) - LENGTH(REPLACE(t.split_column, ',', '')) + 1 );
查询效果如下: