Mysql將欄位用逗號拼接、分割,行轉列/列轉行/兩表間複製數據/生成不同位數的隨機數 ...
mysql數據處理記錄(使用的 Workbench)
- 生成隨機數
- 逗號或分號拼接的字元串分割成多行
- 多行數據轉化成用逗號拼接的字元串
- 將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 )
補充:在數據數據遷移插入時,可將以上四大點配合使用 有問題評論區見。
註意:本篇文章適合練習,不適合大量數據遷移,若千萬級數據請出門右拐.轉載請捎帶本文鏈接。