Returns a random number in the interval 0 to 1, with an optional seed.
RAND( [integer-expression] )
integer-expression An optional seed used to create a random number. This argument allows you to create repeatable random number sequences.
The RAND function is a multiplicative linear congruential random number generator. See Park and Miller (1988), CACM 31(10), pp. 1192-1201 and Press et al. (1992), Numerical Recipes in C (2nd edition, Chapter 7, pp. 279). The result of calling the RAND function is a pseudo-random number n where 0 < n < 1 (neither 0.0 nor 1.0 can be the result).
When a connection is made to the server, the random number generator seeds an initial value. Each connection is uniquely seeded so that it sees a different random sequence from other connections. You can also specify a seed value (integer-expression) as an argument. Normally, you should only do this once before requesting a sequence of random numbers through successive calls to the RAND function. If you initialize the seed value more than once, the sequence is restarted. If you specify the same seed value, the same sequence is generated. Seed values that are close in value generate similar initial sequences, with divergence further out in the sequence.
Never combine the sequence generated from one seed value with the sequence generated from a second seed value, in an attempt to obtain statistically random results. In other words, do not reset the seed value at any time during the generation of a sequence of random values.
The RAND function is treated as a non-deterministic function. The query optimizer does not cache the results of the RAND function.
For more information about non-deterministic functions, see Function caching.
SQL/2003 Vendor extension.
The following statements produce eleven random results. Each subsequent call to the RAND function where a seed is not specified continues to produce different results:
SELECT RAND( 1 ); SELECT RAND( ), RAND( ), RAND( ), RAND( ), RAND( ); SELECT RAND( ), RAND( ), RAND( ), RAND( ), RAND( );
The following example produces two sets of results with identical sequences, since the seed value is specified twice:
SELECT RAND( 1 ), RAND( ), RAND( ), RAND( ), RAND( ); SELECT RAND( 1 ), RAND( ), RAND( ), RAND( ), RAND( );
The following example produces five results that are near each other in value, and are not random in terms of distribution. For this reason, calling the RAND function more than once with similar seed values is not recommended:
SELECT RAND( 1 ), RAND( 2 ), RAND( 3 ), RAND( 4 ), RAND( 5 );
The following example produces five identical results, and should be avoided:
SELECT RAND( 1 ), RAND( 1 ), RAND( 1 ), RAND( 1 ), RAND( 1 );