Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 参考 » 使用 SQL » SQL 函数 » SQL 函数 (P-Z)

 

RAND 函数 [Numeric]

返回 0 到 1 之间的一个随机数(带可选的种子值)。

语法
RAND( [integer-expression] )
参数
  • integer-expression   用于创建随机数的可选种子。此参数用于创建可重复的随机数序列。

返回值

DOUBLE

注释

RAND 函数是一个倍增线性同余随机数发生器。请参见 Park and Miller (1988) 出版的《CACM 31(10)》1192-1201 页及 Press et al.(1992) 出版的《Numerical Recipes in C》(第 2 版,第 7 章,第 279 页)。279). 调用 RAND 函数的结果是生成一个伪随机数 n,其中 0 < n < 1(0.0 或 1.0 都不能作为结果)。

建立到服务器的连接时,随机数生成器会将初始值作为种子。将唯一地为每个连接提供种子,从而使每个连接看到的随机序列都与其它连接所看到的不同。还可以指定种子值 (integer-expression) 作为参数。通常,只应在通过对 RAND 函数进行连续调用来请求随机数序列之前执行一次此操作。如果多次初始化种子值,将会重新启动序列。如果指定同一种子值,将会生成同一序列。值相近的种子值会生成相似的初始序列,序列中的发散度会进一步外扩。

千万不要将从某个种子值生成的序列与从另一个种子值生成的序列合并,以尝试获得统计随机结果。换言之,不要在随机值的序列生成期间重设种子值。

RAND 函数被视为非确定型函数。查询优化程序不会对 RAND 函数的结果进行高速缓存。

有关非确定型函数的详细信息,请参见函数高速缓存

标准和兼容性
  • SQL/2003   服务商扩充。

示例

以下语句产生十一个随机结果。对 RAND 函数的每个后续调用(不指定种子)都会继续生成不同的结果:

SELECT RAND( 1 );
SELECT RAND( ), RAND( ), RAND( ), RAND( ), RAND( );
SELECT RAND( ), RAND( ), RAND( ), RAND( ), RAND( );

以下示例会产生两组具有相同序列的结果,因为种子值指定了两次:

SELECT RAND( 1 ), RAND( ), RAND( ), RAND( ), RAND( );
SELECT RAND( 1 ), RAND( ), RAND( ), RAND( ), RAND( );

以下示例产生五个值相近的结果,这些结果在分布上并不是随机的。由于这个原因,不建议使用相似的种子值多次调用 RAND 函数:

SELECT RAND( 1 ), RAND( 2 ), RAND( 3 ), RAND( 4 ), RAND( 5 );

以下示例会产生五个完全相同的结果,应该加以避免:

SELECT RAND( 1 ), RAND( 1 ), RAND( 1 ), RAND( 1 ), RAND( 1 );