Sql server 如何在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
选择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。=)无法抵抗(因为你已经得到了非常有用的答案,哈哈)。