MSSQL可採用NEWID()函數可產生每次都不同且不重複的全域唯一辨識項(Globally Unique
Identifier;GUDI),處理後即可滿足所需產生。
ORACLE
10g提供字元亂數套件DBMS_RANDOM.STRING,可指定大小寫、文數字等多種型式組合,語法請參本文下方。兩種資料庫取得5組10碼之亂數,SQL及執行結果如下:
SQL
|
執行結果
|
|
MSSQL
|
SELECT LEFT(REPLACE(NEWID(), '-', ''), 10) random
FROM master.dbo.spt_values N
WHERE 1=1
AND N.type ='P'
AND N.number<5
|
|
ORACLE
|
SELECT
DBMS_RANDOM.STRING('X', 10) random
FROM DUAL
CONNECT BY LEVEL <=5
|
|
ORACLE
DBMS_RANDOM.STRING(opt, len)
|
第一個參數(opt)為形式(如下表),第二個參數(len)為回傳字串長度,各種形式參數及範例如下。
參數
|
說明
|
範例
|
U
|
大寫字母(uppercase alphabets)
|
NEBKRFYQVURYNKAWYAWI |
L
|
小寫字母(lowercase alphabets)
|
idpnjsxvjbmlohmertfa
|
A
|
大、小寫字母(mixed-case alphabets)
|
POsGlkbnMqCTwMWEiFSc
|
X
|
大寫字母及數字(uppercase alphabets and numbers)
|
JYNW2H1YSVP61D12U4AM
|
P
|
可視字元(printable characters)
|
Qz3<>uQ5Fpc4`quAit)P
|
SQL語法如下可自行測試
SELECT DBMS_RANDOM.STRING('U', 10) "U(大寫字母)"
, DBMS_RANDOM.STRING('L', 10) "L(小寫字母)"
, DBMS_RANDOM.STRING('A', 10) "A(大小寫字母)"
, DBMS_RANDOM.STRING('X', 10) "X(大寫及數字)"
, DBMS_RANDOM.STRING('P', 10) "P(可視字元)"
FROM DUAL
CONNECT BY LEVEL <=5
|
MSSQL
CRYPT_GEN_RANDOM( len [ , seed ] )
|
第一個參數(len)為回傳字串長度,第二個參數為隨機種子值(選擇性參數)。
SELECT CAST(N'' as xml).value('xs:base64Binary(xs:hexBinary(sql:column("rnd")))'
, 'varchar(max)') Random
FROM
(
SELECT N.number No
, CAST(CRYPT_GEN_RANDOM(8) AS VARBINARY(max)) rnd
FROM master.dbo.spt_values N
WHERE 1=1
AND N.type ='P'
AND N.number<5
) A
|
沒有留言:
張貼留言