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 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?
  • ¥40 串口调试助手打开串口后,keil5的代码就停止了
  • ¥15 电脑最近经常蓝屏,求大家看看哪的问题