SQL Serverでは、T-SQL RAND()
関数を使用すると、ランダムな数値を生成できます。具体的には、0から1までの疑似ランダム浮動小数点値を返します。
この関数は、シード値を提供するオプションの引数を受け入れます。任意のシード値について、結果は常に同じになります。
構文
構文は次のようになります:
RAND ( [ seed ] )
シードの場所 シード値を与える整数式(tinyint、smallint、またはint)です。この引数が指定されていない場合、SQLServerはランダムにシードを割り当てます。
例1-引数なし
これは、引数を提供しない場合に何が起こるかを示すための基本的な例です。
SELECT RAND() Result;
結果:
+--------------------+ | Result | |--------------------| | 0.0354675287734768 | +--------------------+
結果は一定ではありません。実行するたびに異なります。
複数のRAND()
を実行するとどうなるかの例を次に示します。 一緒に機能します。
SELECT RAND() 'Result 1', RAND() 'Result 2', RAND() 'Result 3';
結果:
+-------------------+------------------+--------------------+ | Result 1 | Result 2 | Result 3 | |-------------------+------------------+--------------------| | 0.999568268427369 | 0.40098746841349 | 0.0606836711764244 | +-------------------+------------------+--------------------+
例2–シード値の使用
前述のように、引数を渡してシード値を決定できます。これにより、関数の出力に影響を与えることができます。
SELECT RAND(8) Result;
結果:
+-------------------+ | Result | |-------------------| | 0.713722424011731 | +-------------------+
この場合、等しい引数値が指定されていれば、関数は毎回同じ値を返します。これは、次の例で示されています。
SELECT RAND(8) 'Result 1', RAND(8) 'Result 2', RAND(8) 'Result 3';
結果:
+-------------------+-------------------+-------------------+ | Result 1 | Result 2 | Result 3 | |-------------------+-------------------+-------------------| | 0.713722424011731 | 0.713722424011731 | 0.713722424011731 | +-------------------+-------------------+-------------------+
関数を3回実行しました。また、毎回同じシードを使用したため、結果はすべて同じでした。
例3–式の一部としてRAND()を使用する
RAND()
を使用できます 式の一部として機能します。
SELECT RAND()*10 Result;
結果:
+------------------+ | Result | |------------------| | 3.32720913214171 | +------------------+
例4–結果の丸め
FLOOR()
などの関数内に関数をネストすることで、小数部分を削除することもできます。 またはCEILING()
。
SELECT CEILING(RAND()*10) Result;
結果:
+----------+ | Result | |----------| | 3 | +----------+
例5–2つの数値の間にランダムな整数を返す
乱数が2つの数字の間にある必要があることを指定することもできます。
これは、5から10までのランダムな数字を生成する例です。
SELECT FLOOR(RAND()*(10-5+1)+5) Result;
結果:
+----------+ | Result | |----------| | 9 | +----------+
同じコードを複数回実行して、さまざまな結果を確認しましょう。
SELECT FLOOR(RAND()*(10-5+1)+5) 'Result 1', FLOOR(RAND()*(10-5+1)+5) 'Result 2', FLOOR(RAND()*(10-5+1)+5) 'Result 3';
結果:
+------------+------------+------------+ | Result 1 | Result 2 | Result 3 | |------------+------------+------------| | 10 | 7 | 6 | +------------+------------+------------+