如果按循环两次来拼的话不是应该会出现
(姓+名+姓+名)这种名字吗?
现在出来的名字是正常的 (姓+名+名)
刚学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));