對於亂數函數,MSSQL提供的RAND()與NEWID()函數,而ORACLE並未提供相關函數可供使用,但可以採用DBMS Packages所提供的DBMS_RANDOM套件以產生亂數(Random)。
MSSQL
MSSQL提供的RAND()亂數函數,可產生0.0至1.0(不含)的浮點數,語法如下:
RAND ( [ seed ] )
|
其中seed引數為初始值(或稱為種子)。若未指定則MSSQL將隨機指派一個初始值,但當指定初始值後,所產生結果則一律相同,建議可改採用NEWID()函數。NEWID()函數可產生每次都不同且不重複的全域唯一辨識項(Globally Unique Identifier;GUDI),處理後同樣可產生介於0至1的浮點數。以下將產生五組亂數,SQL語法及結果如下所示:
SQL /執行結果
|
|
SQL
|
SELECT TOP 5 RAND() "RAND()"
, CAST(CHECKSUM(NEWID()) & 0x7fffffff AS
float) / CAST (0x7fffffff AS int) "NEWID()"
FROM sysobjects
|
結果
|
|
ORACLE
ORACLE提供DBMS_RANDOM套裝程式可產生數值或字串之亂數,套件中常用為VALUE()函數可用於產生數值亂數,依是否設定上下界參數與否而區分成兩種方法,預設(不含參數)將傳回介於0.0至1.0(不含)之間,具有38位數的浮點數;傳入下界(low)、上界(high)參數者,將產生介於下界到上界(不含)之間浮點數,整理如下表所示。
語法
|
說明
|
DBMS_RANDOM.VALUE
|
傳回範圍從0.0至1.0(不含)具有38位精準度浮點數,值域為[0, 1)。
|
DBMS_RANDOM.VALUE(low, high)
|
傳回範圍從low至high(不含)的浮點數,值域為[low, high)。
|
註:數學值域定義括號[]代表包含,小括號()代表不包含。
以CONNECT BY產生五筆資料,測試[0, 1)間浮點數及[1,10]整數兩種形式之亂數,SQL語法及執行結果如下所示。
SQL
|
執行結果
|
SELECT DBMS_RANDOM.VALUE "Rand [0,
1)"
--, TRUNC(DBMS_RANDOM.VALUE()*10)+1
"Rand [1, 10]"
, TRUNC(DBMS_RANDOM.VALUE(1, 11)) "Rand
[1,10]"
FROM DUAL
CONNECT BY LEVEL <=5
|
|
沒有留言:
張貼留言