小编典典

mysql:拆分varchar值并插入部分

sql

我的表中有不规范的记录:

ID, CODES
1   |1|2|3|4
2   |5|6|7|8

在第二列中,有int值,保存在varchar字段中,由|分隔。象征。我想使用链接表将它们转换为普通的Many2Many关系形式。所以我想创建一个这样的表

ID CODE
1  1
1  2
1  3
1  4
....
2  8

我知道我可以遍历mysql存储函数中的记录,拆分字符串和插入值。但是我有兴趣:是否可以在 不使用 存储过程/函数的 情况下
以这种方式转换数据,而仅使用查询(创建表…选择…)?谢谢。

UPD:在不同的行中有可变数量的代码。每行有1到15个代码。


阅读 193

收藏
2021-05-16

共1个答案

小编典典

这是它的工作方式,包括测试数据等。

但是请 考虑一下,这只是一个 有趣的 答案。显然要走的路是存储过程或函数或其他任何东西。

drop table testvar;
create table testvar (id int, codes varchar(20));
insert into testvar values (1, '|1|2|3|4'), (2, '|5|6|7|8');



drop table if exists inserttest;
create table inserttest (id int, code int);

select @sql:=left(concat('insert into inserttest values ', group_concat( '(', id, ',', replace(right(codes, length(codes) - 1), '|', concat( '),(', id, ',' )), '),' separator '')), length(concat('insert into inserttest values ', group_concat( '(', id, ',', replace(right(codes, length(codes) - 1), '|', concat( '),(', id, ',' )), '),' separator ''))) -1)
from testvar;

prepare stmt1 from @sql;
execute stmt1;

select * from inserttest;
2021-05-16