2014-04-26 82 views
-2

我需要創建的給定長度的數字的隨機字符串創建的數字的隨機字符串

CREATE FUNCTION UniqConvert 
(@calue as varchar(max), 
@len as int) 

輸出應該是長度@len 的,應該是唯一的每個輸入@value

我已經問類似的問題: Create random string of digits T-SQL 這其中有不同的概念

+0

問題似乎很混淆。這聽起來像你想散列輸入,但也有可變長度輸出。你確定嗎?如果輸出長度比香草散列短,你會增加碰撞的機率。如果大於正常散列值,則不會獲得任何結果,並且可能很難使用散列值。 – PaulG

+0

我遇到的問題是varchar輸入和'唯一性'的'len'規定。想象一下,你依次通過'A','Z'並要求len = 1。存在明顯的碰撞。你可能知道你需要什麼,不要這樣做。你的問題沒有說明,我認爲它應該。我知道這是一個愚蠢的例子,但它顯示了我想要創造的點。 –

+0

你有沒有考慮過使用'crypto'哈希函數之一?我知道它們很貴,但起初看起來似乎最能做到你想要的。其實,我猜測,因爲我不知道你的'用例'。 –

回答

0
declare @len int 
set @len = 3 
DECLARE @Random INT  
DECLARE @Upper INT  
DECLARE @Lower INT 
SET @Lower = power(10,@Len-1) ---- The lowest random number  
SET @Upper = power(10,@Len)-1 ---- The highest random number  
SELECT @Random = ROUND(((@Upper - @Lower -1) * RAND() + @Lower), 0) 

select @Random 
+0

是給你的解決方案? – vignesh

0

試試這個

select Cast(Round(Rand()*power(10,@Len),0) as Varchar(30))