需求:需要插入隨機數據,長度為6位,包含數字和大寫字母。
一般來說我們會寫類似如下的存儲過程片斷:
declare str char(62) default 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; declare str6 char(6); set str6=concat(substring(str,1+floor(rand()*61),1),substring(str,1+floor(rand()*61),1),substring(str,1+floor(rand()*61),1),substring(str,1+floor(rand()*61),1),substring(str,1+floor(rand()*61),1),substring(str,1+floor(rand()*61),1));
其實我們也可以采用下面另一種方法,用char函數,產生單一隨機字符的方法如下:
select char(if(floor(rand()*2)=0,65+floor(rand()*26),48+floor(rand()*9)))
當然要產生6位的話就直接復制多幾個出來就好了:
select char(if(floor(rand()*2)=0,65+floor(rand()*26),48+floor(rand()*9)),if(floor(rand()*2)=0,65+floor(rand()*26),48+floor(rand()*9)),if(floor(rand()*2)=0,65+floor(rand()*26),48+floor(rand()*9)),if(floor(rand()*2)=0,65+floor(rand()*26),48+floor(rand()*9)),if(floor(rand()*2)=0,65+floor(rand()*26),48+floor(rand()*9)),if(floor(rand()*2)=0,65+floor(rand()*26),48+floor(rand()*9)))
小記錄一下
以下產生的是符合位數的,不一定有意義,滿足一些測試要求:
隨機身份證:
concat('44030319',cast(UNIX_TIMESTAMP()+floor(rand()*8000000000) as char )),
隨機手機號:
UNIX_TIMESTAMP()*10+floor(rand()*4000000000)