【发布时间】:2015-01-10 06:38:16
【问题描述】:
我需要为每一行生成一个介于两个数字之间的随机数。
例如:
select ColName,(1500 到 2000 之间的随机数) from TableName
提前致谢
【问题讨论】:
标签: sql sql-server sql-server-2008 random sql-server-2012
我需要为每一行生成一个介于两个数字之间的随机数。
例如:
select ColName,(1500 到 2000 之间的随机数) from TableName
提前致谢
【问题讨论】:
标签: sql sql-server sql-server-2008 random sql-server-2012
随机数公式为
随机小数范围
SELECT RAND()*(b-a)+a;
示例
SELECT RAND()*(25-10)+10; // Random between 10 to 25
随机整数范围
SELECT FLOOR(RAND()*(b-a)+a);
示例
SELECT FLOOR(RAND()*(25-10)+10);
【讨论】:
FLOOR或ROUND或CEILING函数来避免小数部分。
DECLARE @start INT
DECLARE @end INT
SET @start = 1500
SET @end = 2000
SELECT Round(( ( @end - @start - 1 ) * Rand() + @start ), 0)
更新:获取每一行的随机数。
select ABS(Checksum(NewID()) % (@end-@start)) + @start
【讨论】:
rand(@@spid+ @@PACK_RECEIVED + datepart(microsecond,getdate()) )
需要稍作改动,通过替换以下代码它会响应。
Round(( ( @end - @start - 1 ) * Rand(checksum(newid())) + @start ), 0)
例如:
生成相同的值:
select top 10 ROUND(((2000 - 1500 -1) * RAND() + 1500), 0) 来自 sysobjects
产生不同的价值:
select top 10 ROUND(((2000 - 1500 -1) * Rand(checksum(newid()))+ 1500), 0) 来自 sysobjects
【讨论】:
SELECT ROUND(((2000 - 1500 -1) * RAND() + 1500), 0)
【讨论】: