次の方法で共有


ランド(Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsMicrosoft Fabric SQL Database

0から1までの擬似ランダムfloat値を排他的に返します。

Transact-SQL 構文表記規則

構文

RAND ( [ seed ] )

Note

この構文は、Azure Synapse Analytics のサーバーレス SQL プールでサポートされていません。

引数

seed

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

戻り値の型

float

注釈

同じシード値を使用して RAND() を繰り返し呼び出しても、同じ結果が返されます。

  • 1 つの接続について、指定したシード値で RAND() を呼び出すと、以降のすべての RAND() の呼び出しで、シード値を指定した RAND() の呼び出しに基づいた結果が生成されます。 たとえば、次のクエリでは、同じ数値のシーケンスが常に返されます。

    SELECT RAND(100),
            RAND(),
            RAND();
    
  • RAND() または UPDATE クエリで INSERT 関数を使用すると、影響を受けるすべての行が同じ値を取得します。

A。 4つの異なる乱数を作成します

次の例では、RAND() 関数によって 4 つの異なる乱数が生成されます。

DECLARE @counter AS SMALLINT;

SET @counter = 1;

WHILE @counter < 5
    BEGIN
        SELECT RAND() AS RandomNumber;
        SET @counter = @counter + 1;
    END
GO

B: ランダムに0または1を生成します

以下の例では、 ROUND() 関数を使ってランダムに 0 または 1を返します。

SELECT ROUND(RAND(), 0) AS ZeroOrOne;
GO

Note

この例では、 FLOOR() 関数は常に 0を返しますが、 CEILING() 関数は常に 1を返します。

C. 1より大きな乱数を生成する

ランダム な浮動小数点 数の範囲を、 RAND() 関数に整数値と掛け合わせることでスケールできます。 以下の例は、010の間のランダムな浮動小数点を返します。

DECLARE @Constant AS INT;
SET @Constant = 10;

SELECT @Constant * RAND() AS RandomNumber;
GO

D: ランダムな整数を生成する

RAND()関数をスケーリングし、ROUND()FLOOR()、またはCEILING()関数と組み合わせることでランダムな整数値を生成できます。 以下の例は、4 0 から 10までのランダムな整数を返します。

DECLARE @Constant AS INT;
SET @Constant = 10;

SELECT ROUND(@Constant * RAND(), 0) AS FirstRandomInteger,
       FLOOR(@Constant * RAND()) AS SecondRandomInteger,
       CEILING(@Constant * RAND()) AS ThirdRandomInteger;
GO

E. テーブルにランダムな値を挿入します

以下の例では、テーブル変数にランダムな 整数floatbit の値を埋め込みます。

DECLARE @RandomTable TABLE (
    RandomIntegers INT,
    RandomFloats FLOAT,
    RandomBits BIT);

DECLARE @RowCount AS INT;
DECLARE @Counter AS INT;

SET @RowCount = 10;
SET @Counter = 1;

WHILE @Counter <= @RowCount
    BEGIN
        INSERT INTO @RandomTable
        VALUES (ROUND(10 * RAND(), 0), RAND(), CAST (ROUND(RAND(), 0) AS BIT));
        SET @Counter = @Counter + 1;
    END

SELECT *
FROM @RandomTable;
GO