【问题标题】:Create a random string of digits创建一个随机的数字字符串
【发布时间】:2014-04-26 12:33:42
【问题描述】:

我需要创建一个给定长度的随机数字字符串

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

输出的长度应为@len 并且每个输入应该是唯一的@value

我已经问过类似的问题: Create random string of digits T-SQL 这个有不同的概念

【问题讨论】:

  • 问题似乎很困惑。听起来您想要散列输入,但也有可变长度的输出。你确定吗?如果输出长度比普通散列短,你会增加冲突的机会。如果大于普通散列,您将一无所获,并且可能难以使用散列。
  • 我遇到的问题是 varchar 输入和“唯一性”的“len”规定。想象一下你依次通过'A'..'Z'并要求len = 1。有明显的碰撞。您可能知道自己需要什么,但从不这样做。你的问题没有说明这一点,我认为它应该。我知道这是一个愚蠢的例子,但它表明了我想要表达的观点。
  • 您是否考虑过使用“加密”哈希函数之一?我知道它们很贵,但乍一看,似乎可以满足您的大部分需求。实际上,我猜是因为我不知道您的“用例”。

标签: sql-server tsql hashbytes


【解决方案1】:
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

【讨论】:

    【解决方案2】:

    试试这个

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-27
      • 2011-03-15
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-19
      • 2011-06-29
      相关资源
      最近更新 更多