Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
オプションのシードから、間隔 0 ~ 1 の乱数を返します。Ultra Light Java Edition データベースではサポートされていません。
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言語による数値計算のレシピ』) を参照してください。279). RAND 関数の呼び出し結果は、0 < n < 1 の疑似乱数 n です (0.0 と 1.0 はどちらも結果に含まれません)。
サーバへの接続が確立するときに、この乱数生成関数は初期値のシードを指定します。各接続で異なる乱数シーケンスが生成されるように、各接続には一意のシードが指定されます。また、シード値 (integer-expression) を引数に指定することもできます。通常、シード値の指定は、以降の RAND 関数の呼び出しで乱数シーケンスを要求する前に 1 回だけ実行します。複数回シード値を初期化すると、シーケンスは再開されます。同じシード値を指定すると、同じシーケンスが生成されます。値が近いシード値の場合、似た初期シーケンスが生成されますが、シーケンスが進むにつれて相違が多くなります。
適切な乱数結果を取得するためでも、あるシード値から生成されたシーケンスと、別のシード値から生成されたシーケンスとは結合しないでください。つまり、乱数値のシーケンスを生成しているときに、シード値をリセットしないでください。
RAND 関数は非決定的関数として扱われます。クエリオプティマイザは、RAND 関数の結果をキャッシュしません。
非決定的関数の詳細については、関数のキャッシュを参照してください。
次の文は偶数の乱数結果を生成します。以降、シードを指定しないで 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 );