业务需求:拆分字符串,然后将数字转换成中文描述,返回成以,分割的中文描述
-- 修改结束符,防止在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 $$