mysql 一行数据拆分成多行

本文介绍了如何在MySQL中将一个被斜线(/)分隔的字段拆分成多行。主要步骤包括确定最大拆分数、创建临时表、进行连表查询以及展示拆分结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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、拆分结果

拆分前数据
在这里插入图片描述
拆分后数据
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值