a7339359 2018-04-12 17:00 采纳率: 50%
浏览 800
已结题

MYSQL随机字符拼接问题

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

  • 高智商的生活 2018-04-13 01:08
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)