0
<= v
< 1.0
の範囲にあるランダムな浮動小数点値 v
を戻します。定数整数引数 N
が指定されている場合は、カラム値の反復可能なシークエンスを生成するシード値として使用されます。
mysql>SELECT RAND();
-> 0.9233482386203 mysql>SELECT RAND(20);
-> 0.15888261251047 mysql>SELECT RAND(20);
-> 0.15888261251047 mysql>SELECT RAND();
-> 0.63553050033332 mysql>SELECT RAND();
-> 0.70100469486881 mysql>SELECT RAND(20);
-> 0.15888261251047
定数イニシャライザを使用すれば、シードは実行の前の、ステートメントがコンパイルされる際に一度初期化されます。MySQL 5.1.16 からは、非定数イニシャライザ
( カラム名など ) が引数として使用される場合は、シードは RAND()
の各呼び出しの値で初期化されます。( これは、等価の引数値に対しては、RAND()
は毎回同じ値を戻すということを示しています ) 。MySQL 5.1.3 から 5.1.15 では、非定数引数は許可されていません。それ以前では、非定数引数の使用の効果は未定義になっています。
i
<= R
< j
の範囲のランダムな整数 R
を取得するには、式 FLOOR(i + RAND() * (j – i)
を使用します。例えば、7
<= R
< 12
の範囲にあるランダムな整数を得るには、次のステートメントを使うことができます :
SELECT FLOOR(7 + (RAND() * 5));
ORDER BY
はカラムを複数回評価するため、ORDER BY
句内で RAND()
値を持つカラムを使用することはできません。しかし、次のように行を順不同に摘出することは可能です :
mysql> SELECT * FROM tbl_name ORDER BY RAND();
LIMIT
と結合された ORDER BY RAND()
は、行のセットからランダムなサンプルを選ぶ場合に便利です :
mysql>SELECT * FROM table1, table2 WHERE a=b AND c<d
->ORDER BY RAND() LIMIT 1000;
WHERE
句内の RAND()
は、WHERE
が実行されるたびに再評価されますのでご注意ください。
RAND()
は完璧なランダム発生器というわけではありませんが、同じ MySQL バージョンのプラットフォーム間においてポータブルな ad hoc ランダム数を生成する最も速い方法です。