使用 RAND
RAND 函数用于计算 0 到 1 之间的随机浮点数,并可以选择以 tinyint、int 或 smallint 值作为要计算的随机数的起始点。
下面的示例将计算两个随机数。第一个 RAND()
函数允许 SQL Server 2005 选取种子值,第二个 RAND()
函数使用 3
作为起始点。
SELECT RAND(), RAND(3)
RAND 函数是伪随机数生成器,它将以类似于 C 运行时库 rand 函数的方式进行运算。如果没有提供种子值,系统将生成它自己的可变种子值。如果用某个种子值调用 RAND,则必须使用可变种子值来生成随机数。如果用同一种子值多次调用 RAND,它将返回同一生成值。在以下脚本中,对 RAND 的多次调用将返回同一值,这是因为它们都使用了同一种子值:
SELECT RAND(159784)
SELECT RAND(159784)
SELECT RAND(159784)
从 RAND 生成随机数的常用方法是,用相对可变的某个值作为种子值,例如将 GETDATE 的几个部分累加:
SELECT RAND( (DATEPART(mm, GETDATE()) * 100000 )
+ (DATEPART(ss, GETDATE()) * 1000 )
+ DATEPART(ms, GETDATE()) )
使用基于 GETDATE 的算法生成种子值时,如果在算法中所用的最小日期部分的时间间隔内多次调用 RAND,RAND 仍然会生成重复的值。特别是在单个批处理中多次调用 RAND 时,尤其可能出现这种情况,因为在单个批处理中对 RAND 的多次调用可能会在一毫秒内完成。这是 DATEPART 的最小增量。在这种情况下,请结合基于除时间以外的值来生成种子值。
请参阅
其他资源
RAND (Transact-SQL)
数学函数 (Transact-SQL)