欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Mysql数据处理/行转列/列转行/分割/拼接/数据复制汇总

程序员文章站 2023-01-07 21:55:15
Mysql将字段用逗号拼接、分割,行转列/列转行/两表间复制数据/生成不同位数的随机数 ......

mysql数据处理记录(使用的 workbench)

  1. 生成随机数
  2. 逗号或分号拼接的字符串分割成多行
  3. 多行数据转化成用逗号拼接的字符串
  4. 将a表的数据添加到b表

一、生成随机数

生成18位:(19位就加颗0 / 17位就减0)

select floor(+ rand() * 10000000000000000000)

二、将字符串分割(行转列)

select a.id,substring_index(substring_index(a.b,',',b.help_topic_id+1),',',-1) as name
from
aaa  a
join
mysql.help_topic b
on b.help_topic_id < (length(a.b) - length(replace(a.b,',',''))+1)
order by a.id

这段sql是用逗号分割, 把(aaa替换成 表名) (b替换成需要分割的字段名)  可直接使用

原理和解析过程去 https://sunjia-704471770-qq-com.iteye.com/blog/1912929 

三、用分号拼接 (列转行)

select    group_concat(name)name     from  表名 group by parentuuid(逗号拼接)

分号拼接

select group_concat(name,';')name    from 表名 group by parentuuid

这样的结果是  a;,b;,c;,  改进:

select replace(group_concat(name,';'),',','')name    from  表名  group by parentuuid

结果 a;b;c;

四、将a表数据插入到b表

1.表结构与字段都相同

insert into b select * from  a

注意:如果b表中已有数据  注意的是避免主键重复  如果报错先排查是否主键重复添加,最好的方法是先把a表的主键约束去掉 并使用 alter table 表名 drop id 去掉主键再添加(b表id自增)

2.表结构不同 只添加个别字段

insert into b (字段1,字段2) select 字段1,字段2  from  a   (如果字段名不一样  例:insert into b (字段1,字段2) select 字段a as 字段1,字段b as 字段2  from  a )

补充:在数据数据迁移插入时,可将以上四大点配合使用 有问题评论区见。

注意:本篇文章适合练习,不适合大量数据迁移,若千万级数据请出门右拐.转载请捎带本文链接。