您當前位置:
首頁 >
互聯網 > 用MySQL里的Rand()生成 不連續重復 的隨機數年齡以及隨機姓名字符串
用MySQL里的Rand()生成 不連續重復 的隨機數年齡以及隨機姓名字符串
來源:程序員人生 發布時間:2014-09-15 15:10:57 閱讀次數:3883次
前言:
RAND函數,返回在范圍0到1.0內的隨機浮點值。如果一個整數參數N被指定,它被用作種子值。一,朋友問題描述如下:
(1),有一個用戶表,有id,用戶的真實名字,年齡。
通過一段存儲過程來實現向表里插入100數據,其中年齡隨機姓名 姓氏:’趙錢孫李周吳鄭王’;,隨機取出一個名字:’一段文字字符串’,隨機的取出一個字或者兩個字要求:隨機的名字不能出現連續重復。(2),然后我寫出的代碼如下:
-- 創建用戶表,在project里create table user1 (id int not null primary key auto_increment,name varchar(3) not null,age tinyint not null) charset utf8;-- 創建存儲過程delimiter $$create procedure pro3(num int)begindeclare fname char(1);declare name1 char(1);declare name2 char(1);declare fullname varchar(3);declare age int;declare i int default 1;while i <=num doset fname = substring('趙錢孫李周吳鄭王',floor(1+8*rand()),1); -- 姓set name1 = substring('一二三四五六七八九十甲乙丙丁',floor(1+14*rand()),1); -- 抽一個字set name2 = substring('一二三四五六七八九十甲乙丙丁',floor(1+14*rand()),1); -- 抽一個字if round(rand())=0 then -- 創造一個局部變量fullname代表全名,隨機確定是兩個字還是三個字set fullname = concat(fname,name1);end if;if round(rand())=1 thenset fullname = concat(fname,name1,name2);end if;set age = floor(20+31*rand()); -- 年齡為20-50的隨機insert into user1 values(null,fullname,age); -- 插入數據set i = i + 1; end while;end$$delimiter ;(3),執行結果
call pro3(100); -- 執行過程出現的結果出乎意料,出現了很多連續一樣的姓名,執行結果如下:mysql> select * from user1;+-----+--------+-----+| id | name | age |+-----+--------+-----+| 1 | 趙三 | 28 || 2 | 孫一四 | 50 || 3 | 鄭丁九 | 42 || 4 | 王八 | 47 || 5 | 錢六 | 48 || 6 | 李五 | 26 || 7 | 李五 | 41 || 8 | 鄭二三 | 22 || 9 | 孫七六 | 24 || 10 | 孫三 | 21 || 11 | 錢甲二 | 26 || 12 | 孫丙 | 42 || 13 | 孫丙 | 37 || 14 | 趙六丁 | 24 || 15 | 趙六丁 | 40 || 16 | 王十七 | 28 || 17 | 孫九 | 22 || 18 | 李二 | 23 || 19 | 李十 | 23 || 20 | 趙丁甲 | 50 || 21 | 錢一九 | 49 || 22 | 錢一九 | 22 || 23 | 錢一九 | 30 || 24 | 錢一九 | 30 || 25 | 孫五 | 46 || 26 | 吳三十 | 39 || 27 | 趙七二 | 50 || 28 | 趙七二 | 29 || 29 | 孫甲九 | 20 || 30 | 鄭乙十 | 35 || 31 | 周一 | 50 || 32 | 吳甲七 | 50 || 33 | 李丁十 | 47 || 34 | 李丁十 | 29 || 35 | 李丁十 | 40 || 36 | 孫五 | 47 || 37 | 趙九丙 | 41 || 38 | 鄭三八 | 43 || 39 | 錢七 | 37 || 40 | 錢二一 | 24 || 41 | 王七五 | 45 || 42 | 李十四 | 24 || 43 | 李十四 | 28 || 44 | 孫甲甲 | 49 || 45 | 鄭五 | 38 || 46 | 趙甲 | 27 || 47 | 王三 | 39 || 48 | 王三 | 26 || 49 | 王三 | 22 || 50 | 王三 | 30 || 51 | 錢一九 | 44 || 52 | 趙四 | 30 || 53 | 王十九 | 50 || 54 | 王十九 | 34 || 55 | 王十九 | 40 || 56 | 周丙甲 | 20 || 57 | 孫十 | 47 || 58 | 王丙 | 32 || 59 | 王六 | 43 || 60 | 吳三甲 | 29 || 61 | 王乙 | 26 || 62 | 趙甲 | 46 || 63 | 趙甲 | 23 |
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
------分隔線----------------------------
------分隔線----------------------------