前幾天在開發一個系統,需要用到隨機字元串,但是mysql的庫函數有沒有直接提供,就簡單的利用現有的函數東拼西湊出隨機字元串來.下麵簡單的說下實現當時. 1.簡單粗暴. 上訴示例產生的是:6位長度的隨機字元串. 函數解釋: rand() :產生 0-1之間的小數,簡稱種子.rand()*25 產生的數 ...
前幾天在開發一個系統,需要用到隨機字元串,但是mysql的庫函數有沒有直接提供,就簡單的利用現有的函數東拼西湊出隨機字元串來.下麵簡單的說下實現當時.
1.簡單粗暴.
select ..., substring(MD5(RAND()),floor(RAND()*26)+1,6) as rand_str .....
上訴示例產生的是:6位長度的隨機字元串.
函數解釋:
rand() :產生 0-1之間的小數,簡稱種子.rand()*25 產生的數 在 0- 25 之間,不包括25
floor(val): 生成最近接val的最大整數
md5() :對字元串進行Md5加密(單向),生成的字元串長度是32位。
substring(str,pos,len):截取字元串,第一個參數:待截取的字元串,第二個參數:開始的位置(這裡有些不同,下標開始位置為1,可以試試下),第三個參數:截取的長度.
2.將方式1進行包裝一下:自定義函數
drop function if exists rand_str; #第一句: 如果存在重名函數,就將其刪除 create function rand_str(strlen smallint) returns varchar(255) #第二句: 定義一個函數,名稱'rand_str' ,參數名 strlen 參數類型 smallint , 返回值類型 varchar(255) ,特別 註意下 這裡的 是returns 下麵的是 return #BEGIN #相當於左大括弧 '{' DECLARE result_str VARCHAR(255) DEFAULT ''; #聲明返回值對象,類型 ,長度 ,預設值 SET result_str =SUBSTRING(MD5(RAND()),32-strlen,strlen); #設置返回值對象的值 方式1中簡單粗暴的函數 RETURN result_str; #返回 結果對象 這裡的是 return END # 結束標識 相當於 '}'
3.自定義函數 直接上代碼 每一句的實現就不解釋了,可以參加方式2中的代碼解釋看一下
DROP FUNCTION IF EXISTS rand_str; create FUNCTION rand_str(strlen SMALLINT ) RETURNS VARCHAR(255) BEGIN DECLARE randStr VARCHAR(255) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'; DECLARE i SMALLINT DEFAULT 0; DECLARE resultStr VARCHAR(255) DEFAULT ''; WHILE i<strlen DO SET resultStr=CONCAT(SUBSTR(randStr,FLOOR(RAND()*LENGTH(randStr))+1,1),resultStr); SET i=i+1; END WHILE; RETURN resultStr; END