Mysql 逗号分隔行列转换总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql 逗号分隔行列转换总结相关的知识,希望对你有一定的参考价值。

方法一
存储过程实现:

-- 修改结束符,防止在mysql命令行中默认分号直接运行
delimiter $$

-- 创建一个计算拆分后字符串的个数函数
drop function if exists calc_length $$
create function calc_length(str varchar(200), splitstr varchar(5)) returns int(11)
begin 
return length(str)-length(replace(str, splitstr, ‘‘))+1;
end $$

-- 创建一个模拟的split拆分字符串的函数
drop function if exists split_string $$
create definer=‘root‘@‘localhost‘ function split_string(str varchar(200), splitstr varchar(5), strindex int) returns varchar(255)
begin
declare result varchar(255) default ‘‘;
set result =reverse(substring_index( reverse(substring_index(str, splitstr, strindex)), splitstr, 1));
return result;
end $$

-- 创建一个存储过程
drop procedure if exists proce_split $$
create procedure proce_split()
begin
declare cnt int default 0;
declare i int default 0;
declare str varchar(2000) default ‘‘;
select name into str from table1 where id =2;
set cnt = calc_length(str, ‘,‘);

drop table if exists table2;
create table2(id int not null, name varchar(255) not null) default charset=utf8;

while i < cnt 
do 
set i = i+1;
insert into table(id, name) values(i, split_string(str,‘,‘, i));
end while;
end $$

方法二:
笛卡尔积实现:

select a.ID,substring_index(substring_index(a.loginName,‘,‘,b.help_topic_id+1),‘,‘,-1) 
from 
account a
join
mysql.help_topic  b
on b.help_topic_id < (length(a.loginName)- length(replace(a.loginName,‘,‘,‘‘))+1)
order by a.ID;

以上是关于Mysql 逗号分隔行列转换总结的主要内容,如果未能解决你的问题,请参考以下文章

MySQL逗号分割字段的行列转换技巧

转载mysql行列转换方法总结

mysql中选定值的逗号分隔字符串

mysql中把selct中的数据列表转换成逗号分隔的字符串

在mysql中将分隔字符串转换为多个值

将逗号分隔值转换为双引号逗号分隔字符串