mysql行转列

mysql行转列

工作中碰到问题
接口传输json存到数据库但有的数据,分隔

在这里插入图片描述
解决的办法将数据行转换成列
将,分隔的数据转换成多条数据
最后的结果如下
在这里插入图片描述
上数据库新建一个表 incre_table 字段AutoIncre
DROP TABLE IF EXISTS incre_table;
CREATE TABLE incre_table (
AutoIncreID int(11) NOT NULL DEFAULT ‘0’,
PRIMARY KEY (AutoIncreID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
插入数据
INSERT INTO incre_table VALUES (‘0’);
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’);
INSERT INTO incre_table VALUES (‘11’);
INSERT INTO incre_table VALUES (‘12’);
INSERT INTO incre_table VALUES (‘13’);
INSERT INTO incre_table VALUES (‘14’);

select *,substring_index(substring_index(需要分隔的字段名,’,’,b.AutoIncreID),’,’,-1)
from
表名 a
join
incre_table b
on b.AutoIncreID < (length(需要分隔的字段名) - length(replace(需要分隔的字段名,’,’,’’))+1)

原理分析
这个join最基本原理是笛卡尔积。通过这个方式来实现循环。

以下是具体问题分析:

length(字段) - length(replace(字段,’,’,’’))+1 表示了,按照逗号分割后,该列拥有的数值数量,下面简称n

join过程的伪代码:

根据b表字段id进行循环

{

判断:i 是否 < n

{

获取最靠近第 i 个逗号之前的数据, 即 substring_index(substring_index(a.字段,’,’,AutoIncreID),’,’,-1)

i = i +1

}

ID = ID +1

}
总结**:**
这种方法的缺点在于,我们需要一个拥有连续数列的独立表(这里是incre_table)。并且连续数列的最大值一定要大于符合分割的值的个数。

例如有一行的mSize 有100个逗号分割的值,那么我们的incre_table 就需要有至少100个连续行。
insert into 表名(AutoIncreID ) values (1 到 100);

原文地址:https://www.cnblogs.com/cenalulu/archive/2012/08/20/2647463.html

侵删

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值