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 関数 [数値]

オプションのシードから、間隔 0 ~ 1 の乱数を返します。

構文
RAND( [integer-expression] )
パラメータ
  • integer-expression   乱数の作成に使用するオプションのシード。この引数を使用して、繰り返し可能な乱数列を作成できます。

戻り値

DOUBLE

備考

RAND 関数は、乗算線形合同法で乱数を生成します。詳細については、CACM 31(10) の Park と Miller (1988) の寄稿 (1192 ~ 1201 ページ) と、Press 他 (1992) の『Numerical Recipes in C』(第 2 版の第 7 章 279 ページ、邦訳は『ニューメリカルレシピ・イン・シー日本語版—C言語による数値計算のレシピ』) を参照してください。RAND 関数の呼び出し結果は、0 < n < 1 の疑似乱数 n です (0.0 と 1.0 はどちらも結果に含まれません)。

サーバへの接続が確立するときに、この乱数生成関数は初期値のシードを指定します。各接続で異なる乱数シーケンスが生成されるように、各接続には一意のシードが指定されます。また、シード値 (integer-expression) を引数に指定することもできます。通常、シード値の指定は、以降の RAND 関数の呼び出しで乱数シーケンスを要求する前に 1 回だけ実行します。複数回シード値を初期化すると、シーケンスは再開されます。同じシード値を指定すると、同じシーケンスが生成されます。値が近いシード値の場合、似た初期シーケンスが生成されますが、シーケンスが進むにつれて相違が多くなります。

適切な乱数結果を取得するためでも、あるシード値から生成されたシーケンスと、別のシード値から生成されたシーケンスとは結合しないでください。つまり、乱数値のシーケンスを生成しているときに、シード値をリセットしないでください。

RAND 関数は非決定的関数として扱われます。クエリ・オプティマイザは、RAND 関数の結果をキャッシュしません。

非決定的関数の詳細については、関数のキャッシュを参照してください。

標準と互換性
  • SQL/2003   ベンダ拡張。

次の文は偶数の乱数結果を生成します。以降、シードを指定しないで RAND 関数を呼び出すと、毎回異なる結果が生成されます。

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

次の例では、シーケンスが同じ 2 つの結果セットが生成されます。これはシード値が 2 度指定されるためです。

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

次の例では、値が互いに近く、分布の点からは乱数とは言えない 5 つの結果が生成されます。このため、シード値が似た RAND 関数を複数回呼び出すことはおすすめしません。

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

次の例は、5 つのまったく同じ結果が生成されるため、回避する必要があります。

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