Sql server 如何在SQL Server中生成十个绝对随机数字?

Sql server 如何在SQL Server中生成十个绝对随机数字?,sql-server,Sql Server,如何在SQL Server中生成十个绝对随机数字 我尝试了选择ABS(校验和(rand()) 但是我不能控制数字的数量 您可以强制随机数落在一个范围内,使其具有相同的位数,例如: SELECT 10000 + CONVERT(INT, (99000-10000+1)*RAND()) SELECT len(CAST(10000 + CONVERT(INT, (99000-10000+1)*RAND()) as VARchar(20))) --5 digits 由于rand()始终是(9900

如何在SQL Server中生成十个绝对随机数字

我尝试了
选择ABS(校验和(rand())


但是我不能控制数字的数量

您可以强制随机数落在一个范围内,使其具有相同的位数,例如:

SELECT 10000 + CONVERT(INT, (99000-10000+1)*RAND())


SELECT len(CAST(10000 + CONVERT(INT, (99000-10000+1)*RAND()) as VARchar(20))) --5 digits
由于
rand()
始终是
<0=>(99000-10000+1)*rand()
始终是
[0,89001)
,因此您将得到一个介于10000和89000之间的随机数,该数都有5位数字

RAND()返回一个介于0和1之间的数字。因此不需要调用ABS()。通过将RAND的结果乘以10的幂10(1000000000),然后将结果四舍五入,可以得到一个10位随机整数(我在下面的示例中选择了floor,但可以使用天花板()或舍入().由于10位是int数据类型的极限,我将POWER()转换为bigint

SELECT FLOOR(RAND() * POWER(CAST(10 as BIGINT), 10))
参考资料


10个随机数=)

[注:我很奇怪……我知道]

SELECT 
  CAST((1/rand()*1000) AS INT) % 10 AS One,
  CAST((1/rand()*1000) AS INT) % 10 AS Two,
  CAST((1/rand()*1000) AS INT) % 10 AS Three,
  CAST((1/rand()*1000) AS INT) % 10 AS Four,
  CAST((1/rand()*1000) AS INT) % 10 AS Five,
  CAST((1/rand()*1000) AS INT) % 10 AS Six,
  CAST((1/rand()*1000) AS INT) % 10 AS Seven,
  CAST((1/rand()*1000) AS INT) % 10 AS Eight,
  CAST((1/rand()*1000) AS INT) % 10 AS Nine,
  CAST((1/rand()*1000) AS INT) % 10 AS Ten
结果:

One Two  Three  Four    Five    Six  Seven  Eight   Nine    Ten
 6   0     1      2      1       0     1      5      2       5

好方法,但最大数字只有9位选择10000000+转换(INT,(99000000-100000+1)*RAND()我想它们可以和你定义的数据类型一样大;)哦,是的,它是int型的,哈哈哈,是的,现在它工作得很好lot@Icarus:除非我遗漏了某些内容,否则这不会使您的数字分布均匀。最左边的数字仅从1到8,省略了0和9。=)无法抵抗(因为你已经得到了非常有用的答案,哈哈)。