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 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 $$  
  
-- 创建一个循环函数
delimiter $$  
drop function if exists split_model $$
create function split_model(str varchar(200))  returns varchar(2000) 
begin  
declare cnt int default 0;  
declare i int default 0;  
declare result  VARCHAR(2000) DEFAULT ' ';
declare ab  VARCHAR(20)DEFAULT ' ';
declare ac  VARCHAR(20)DEFAULT ' ';
set cnt = calc_length(str, '|');    
while i < cnt   
do   
set i = i+1;  
set ab=split_string(str,'|', i);
if ab='1' then set ac='CPM';
elseif ab='2'  
then set ac= 'CPC';
elseif ab='3' then set ac='CPA';
elseif ab='4' then set ac='CPT';
else set ac='CPS';
end if;
set result=CONCAT(result,ac,','); 
END WHILE;
return result;
end $$  


-- 创建一个循环函数
delimiter $$  
drop function if exists split_mediatype $$
create function split_mediatype(str varchar(200))  returns varchar(2000) 
begin  
declare cnt int default 0;  
declare i int default 0;  
declare result  VARCHAR(2000) DEFAULT ' ';
declare ab  VARCHAR(20)DEFAULT ' ';
declare ac  VARCHAR(20)DEFAULT ' ';
set cnt = calc_length(str, ',');    
while i < cnt   
do   
set i = i+1;  
set ab=split_string(str,',', i);
if ab='0' then set ac='购物';
elseif ab='1'  
then set ac= '游戏';
elseif ab='2' then set ac='小说';
elseif ab='3' then set ac='影视';
elseif ab='4' then set ac='教育';
elseif ab='5' then set ac='应用';
else set ac='工具';
end if;
set result=CONCAT(result,ac,','); 
END WHILE;
return result;
end $$  

-- 创建一个循环函数
delimiter $$  
drop function if exists split_mediauser $$
create function split_mediauser(str varchar(200))  returns varchar(2000) 
begin  
declare cnt int default 0;  
declare i int default 0;  
declare result  VARCHAR(2000) DEFAULT ' ';
declare ab  VARCHAR(20)DEFAULT ' ';
declare ac  VARCHAR(20)DEFAULT ' ';
set cnt = calc_length(str, '|');    
while i < cnt   
do   
set i = i+1;  
set ab=split_string(str,'|', i);
set ac= (select name_cn FROM sp_user where id=ab);
set result=CONCAT(result,ac,','); 
END WHILE;
return result;
end $$  


 
  

你可能感兴趣的:(平时遇到的问题)