MySQL函数遍历字符串

crmserver 2018-08-28 10:30:10
MySQL用函数遍历/后面及;前面的数字,然后累加,下面的SQL不符合要求。



DELIMITER $$

CREATE FUNCTION `fun1`(str1 varchar(100)) RETURNS varchar(50)
begin
DECLARE str2 varchar(100);
set str2 = str1;
while instr(str2,'/') != 0 do
set str2 = substring(str2,instr(str2,'/')+1);
end while;
return str2;
end$$

DELIMITER ;


select fun1('DELL/2;LENOVO/3;HP/4;')

这个结果是:4; 希望得到的结果是:9

...全文
313 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵糖糖 2018-08-31
  • 打赏
  • 举报
回复
delimiter $$
create function fun(str1 varchar(100)) returns int(10)
begin
declare str2 varchar(100);
declare num,num1,num2,sum1 int(10);

set str2 := str1;
set sum1 := 0;

while instr(str2,'/') != 0
do
set str1 := str2;

set num1 := instr(str2,'/');

set num2 := instr(str2,';');

set num := num2 - num1 -1;


set str2 := substring(str2,(num1+1),num);
set sum1 := sum1 + str2;


set str2 := str1;
set str2 := substring(str2,(num2+1));
end while;
return sum1;

end $$
delimiter ;
crmserver 2018-08-28
  • 打赏
  • 举报
回复
非常感谢!!!
zjcxc 2018-08-28
  • 打赏
  • 举报
回复

CREATE FUNCTION `fun1`(str1 varchar(100))
RETURNS varchar(50)
begin
DECLARE p int DEFAULT 1;
DECLARE v varchar(50) DEFAULT 0;
set p = locate('/',str1, p)+1;
while p > 1 do
set v = v+substring(str1, p,locate(';',str1,p)-p);
set p = locate('/',str1, p)+1;
end while;
return v;
end
crmserver 2018-08-28
  • 打赏
  • 举报
回复
有没有高手帮忙看一下,谢谢!
luyaran 2018-08-28
  • 打赏
  • 举报
回复
用存储过程试下

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧