目录
1、查找出被分隔符(此处为斜线/)分隔字段需要拆分的最大数量
select max((LENGTH(make_man)-LENGTH(REPLACE(make_man, '/', ''))+1)) from ed_man_work_list_new where make_man LIKE '%/%';
2、创建一张临时表用于联合查询,方便把处理表单行记录分隔为多行
CREATE TEMPORARY TABLE incre_table (
`id` int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
);
插入数据行要大于需要拆分的最大数量;这里暂时先添加10行数据;可根据自身需要控制数据行数量;
insert into incre_table values (1);
insert into incre_table values (2);
insert into incre_table values (3);
insert into incre_table values (4);
insert into incre_table values (5);
insert into incre_table values (6);
insert into incre_table values (7);
insert into incre_table values (8);
insert into incre_table values (9);
insert into incre_table values (10);
...
3、关键在于连表查询 ON b.id <= 斜线/分隔的数量
SELECT t.op_code, t.fdc_op_description, SUBSTRING_INDEX(t.make_man_tmp, '%', -1) make_man, FORMAT(CAST(t.make_man_tmp as SIGNED) * t.make_time * 0.01, 2) make_time, t.end_time
FROM (SELECT a.*, SUBSTRING_INDEX( substring_index(make_man, '/', b.id), '/', - 1 ) AS make_man_tmp
FROM ed_man_work_list_new a
RIGHT JOIN incre_table b
ON b.id <= (LENGTH(a.make_man) - LENGTH(REPLACE (a.make_man, '/', '')) + 1)
WHERE a.make_man LIKE '%/%') t;
4、拆分结果
拆分前数据
拆分后数据