Oracle中生成隨機數的函式(轉載)

憤怒的TryCatch發表於2015-12-01
Oracle中的DBMS_RANDOM程式包中封裝了一些生成隨機數和隨機字串的函式,其中常用的有以下兩個:

DBMS_RANDOM.VALUE函式

 

該函式用來產生一個隨機數,有兩種用法:

 

1. 產生一個介於0和1之間(不包含0和1)的38位精度的隨機數,語法為:

 

 

DBMS_RANDOM.VALUE RETURN NUMBER;

 

這種用法不包含引數。

2. 產生一個介於指定範圍之內的38位精度的隨機數,語法為:

 

DBMS_RANDOM.VALUE(low IN  NUMBER,high IN NUMBER) RETURN NUMBER;

 

這種用法包含兩引數,引數low用來指定要生成的隨機數的下限,引數high指定上限,生成的隨機。請注意生成的隨機數有可能等於下限,但絕對小於上限,即“low<=隨機數<high”

舉個例子: 要產生一個1到100之間的數可以這樣寫: DBMS_RANDOM.VALUE(1,100)

DBMS_RANDOM.STRING函式

 

 

該函式產生一個隨機字串,語法為:

DBMS_RANDOM.STRING (opt IN CHAR,len IN NUMBER) RETURN VARCHAR2;

引數len指定生成的字串的長度。

引數opt指定生成的字串的樣式,允許的取值及其表示的含義如下表所示:

 

舉個例子: 要產生一個長度為6且只包括大寫字母的字串,可以這樣寫: DBMS_RANDOM.STRING('U',6)

附轉:“偽隨機數”和“隨機種子”

首先需要宣告的是,計算機不會產生絕對隨機的隨機數,計算機只能產生“偽隨機數”。其實絕對隨機的隨機數只是一種理想的隨機數,即使計算機怎樣發展,它也不會產生一串絕對隨機的隨機數。計算機只能生成相對的隨機數,即偽隨機數。

所謂的隨機數發生器都是通過一定的演算法對事先選定的隨機種子做複雜的運算,用產生的結果來近似 的模擬完全隨機數,這種隨機數被稱作偽隨機數。偽隨機數是以相同的概率從一組有限的數字中選取的。所選數字並不具有完全的隨機性,但是從實用的角度而言, 其隨機程度已足夠了。偽隨機數的選擇是從隨機種子開始的,所以為了保證每次得到的偽隨機數都足夠地“隨機”,隨機種子的選擇就顯得非常重要。如果隨機種子 一樣,那麼同一個隨機數發生器產生的隨機數也會一樣。一般地,我們使用同系統時間有關的引數作為隨機種子。

轉載自:http://www.cnblogs.com/lgzslf/archive/2008/11/29/1343685.html

 

補充:Sqlserver生成隨機碼

生成數字加字母:select left(Newid(),6) 

相關文章