SQL道場 算術関数 RAND/RANDOM/RND関数

SQLで乱数を得るRAND/RANDOM/RND関数について記載しています。

対応データベースSQL Server MySQL PostgreSQL SQLite Access

RAND/RANDOM/RND関数の文法

SELECT RAND(乱数の種) FROM テーブル
SELECT RANDOM(乱数の種) FROM テーブル
SELECT RND(乱数の種) FROM テーブル
引数乱数の種数値型 乱数の種
返値数値型 乱数

SQLServer

引数乱数の種シード値を指定する整数の式 (tinyint、smallint、または int)。
場合 シード が指定されていない、SQL Server データベース エンジン シード値をランダムに割り当てられます。
指定したシード値について、返される結果は常に同じです
返値float 乱数

RAND/RANDOMは0から1までの乱数を返します。整数値や桁数の大きな乱数を取得したい場合は
掛け算やFLOOR関数などを併用する必要があります。乱数の種を省略した場合は、呼び出すたびに乱数が生成されます。AccessではRND関数を使用します。

実行例

MySQLの実行例

/* MySQL 乱数のサンプル */
SELECT rand();
RAND/RANDOM/RND関数サンプル実行結果

乱数の種を指定した場合

/* MySQL 乱数のサンプル */
SELECT rand(N);

0 <= v < 1.0 の範囲内で、ランダムな浮動小数点値 v を返します。 i <= R < j の範囲内でランダムな整数 R を取得するには、式 FLOOR(i + RAND() * (j − i)) を使用します。たとえば、7 <=R < 12 の範囲のランダム整数を取得するには、次のステートメントを使用します:

RAND/RANDOM/RND関数サンプル実行結果

整数引数 N が指定されている場合は、シード値として使用されます:

  • 定数イニシャライザ引数を使用すると、ステートメントの準備時に、実行前にシードが一度初期化されます。
  • 定数以外のイニシャライザ引数 (カラム名など) を使用すると、シードは RAND() の起動ごとに値で初期化されます。

乱数を生成するときに最初に設定する値のことです。乱数を生成するときに、このシード値を設定しておくと、再現性のある乱数を得ることができます。

10 以上 20 未満の乱数を生成する

/* MySQL 乱数のサンプル */
SELECT FLOOR(10 + RAND() * 10);

FLOOR は切り捨てを行う関数です。

RAND/RANDOM/RND関数サンプル実行結果

ランダムにレコードをソートする方法

/* MySQL 乱数のサンプル */
select * from テーブル名 order by Rand();

SQLServerの実行例

/* SQL Server 乱数サンプル */
SELECT RAND();
RAND/RANDOM/RND関数サンプル実行結果

0 ~ 10 を返す

/* SQL Server 乱数サンプル */
SELECT FLOOR(RAND() * 11) + 0;
RAND/RANDOM/RND関数サンプル実行結果

1 ~ 9 を返す

/* SQL Server 乱数サンプル */
SELECT FLOOR(RAND() * 11) + 0;
RAND/RANDOM/RND関数サンプル実行結果

複数レコードに乱数を一括設定

/* 乱数で更新 */
UPDATE [テーブル]
    SET [カラム] = RAND();

/* RAND関数は引数としてシード値を渡しレコード毎に異なる乱数を設定。 */
UPDATE [テーブル]
    SET [カラム] = RAND([ID]);