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関数サンプル実行結果](https://kcfran.com/wp-content/uploads/2023/07/image-1024x311.png)
乱数の種を指定した場合
/* MySQL 乱数のサンプル */
SELECT rand(N);
0 <= v < 1.0 の範囲内で、ランダムな浮動小数点値 v を返します。 i <= R < j の範囲内でランダムな整数 R を取得するには、式 FLOOR(i + RAND() * (j − i)) を使用します。たとえば、7
<=R
< 12
の範囲のランダム整数を取得するには、次のステートメントを使用します:
![RAND/RANDOM/RND関数サンプル実行結果](https://kcfran.com/wp-content/uploads/2023/07/image-1-1024x306.png)
整数引数 N が指定されている場合は、シード値として使用されます:
- 定数イニシャライザ引数を使用すると、ステートメントの準備時に、実行前にシードが一度初期化されます。
- 定数以外のイニシャライザ引数 (カラム名など) を使用すると、シードは RAND() の起動ごとに値で初期化されます。
乱数を生成するときに最初に設定する値のことです。乱数を生成するときに、このシード値を設定しておくと、再現性のある乱数を得ることができます。
10 以上 20 未満の乱数を生成する
/* MySQL 乱数のサンプル */
SELECT FLOOR(10 + RAND() * 10);
FLOOR は切り捨てを行う関数です。
![RAND/RANDOM/RND関数サンプル実行結果](https://kcfran.com/wp-content/uploads/2023/07/image-2-1024x309.png)
ランダムにレコードをソートする方法
/* MySQL 乱数のサンプル */
select * from テーブル名 order by Rand();
SQLServerの実行例
/* SQL Server 乱数サンプル */
SELECT RAND();
![RAND/RANDOM/RND関数サンプル実行結果](https://kcfran.com/wp-content/uploads/2023/07/image-3-1024x174.png)
0 ~ 10 を返す
/* SQL Server 乱数サンプル */
SELECT FLOOR(RAND() * 11) + 0;
![RAND/RANDOM/RND関数サンプル実行結果](https://kcfran.com/wp-content/uploads/2023/07/image-4-1024x190.png)
1 ~ 9 を返す
/* SQL Server 乱数サンプル */
SELECT FLOOR(RAND() * 11) + 0;
![RAND/RANDOM/RND関数サンプル実行結果](https://kcfran.com/wp-content/uploads/2023/07/image-5-1024x185.png)
複数レコードに乱数を一括設定
/* 乱数で更新 */
UPDATE [テーブル]
SET [カラム] = RAND();
/* RAND関数は引数としてシード値を渡しレコード毎に異なる乱数を設定。 */
UPDATE [テーブル]
SET [カラム] = RAND([ID]);