MYSQL随机字符拼接问题 5C

如果按循环两次来拼的话不是应该会出现
(姓+名+姓+名)这种名字吗?
现在出来的名字是正常的 (姓+名+名)
刚学MYSQL 有些细节老师没讲 求教各位前辈

-- 随机名字 star--
drop function if exists fn_rand_name;
delimiter //
create function fn_rand_name(a int, b int)
returns varchar(100)
begin
declare len int; -- 随机长度[a,b)
declare s0 varchar(800) -- 字 备选字符
default '欣华明乐倩雅成国文星子涵建艺帅发辉宇轩宝亮宁仁大小飞丽静海达刚平婷颖君俊军晓英峰杰涛阳雨敏林广青荣健';
declare s1 varchar(800) -- 姓 备选字符
default '赵钱孙李周吴郑王李刘';
declare ss1 varchar(100) default ''; -- 结果字符串 字
declare ss2 varchar(100) default ''; -- 结果字符串 姓
declare i int default 0; -- 控制执行次数
declare j1 int; -- 在备选字符串s0中随机定位
declare j2 int; -- 在备选字符串s1中随机定位
set len=truncate(a+(b-a)*rand(), 0);-- 计算[a,b)范围的随机长度
while i<len do -- 在 s0 中随机定位一个位置
set j1=truncate(1+char_length(s0)*rand(),0); -- 在 s0 中随机定位一个位置
set j2=truncate(1+char_length(s1)*rand(),0); -- 在 s1 中随机定位一个位置
set ss1=concat(ss1,substring(s0,j1,1)); -- s0中j1位置开始的1个字符,连接到ss1中
set ss2=concat(substring(s1,j2,1),ss1); -- s1中j2位置开始的1个字符, 连接到ss2中
set i=i+1;-- i递增
end while;
return ss2; -- 返回结果
end //
delimiter ;
-- 随机名字 end --

insert into t_student(sname) values (fn_rand_name(2,3));

1个回答

问题在s1的值,你的s1拼接时,会接着上一次循环的s1值后面再加个名,第二次就变成名+名,所以你需要在循环里面写一句,置空s1,就ok了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问