使用 RAND

RAND 函数用于计算 0 到 1 之间的随机浮点数,并可以选择以 tinyintintsmallint 值作为要计算的随机数的起始点。

下面的示例将计算两个随机数。第一个 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)

帮助和信息

获取 SQL Server 2005 帮助