mysql拆分字符串函数
来源:互联网 发布:淘宝官方店都是正品吗 编辑:程序博客网 时间:2024/06/05 10:55
业务需求:拆分字符串,然后将数字转换成中文描述,返回成以,分割的中文描述
-- 修改结束符,防止在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 $$
阅读全文