次の方法で共有


RAND 関数の使用

RAND 関数は 0 ~ 1 の間の浮動小数点乱数を計算します。オプションで、計算する乱数の開始位置として tinyint 型、int 型、または smallint 型の値をとることができます。

次の例では 2 つの乱数を計算しています。SQL Server 2005 では、最初の RAND() 関数によって seed の値が選択され、2 番目の RAND() 関数では 3 が開始位置の値として使用されます。

SELECT RAND(), RAND(3)

RAND 関数は、C ランタイム ライブラリ rand 関数と同じように動作する擬似乱数生成関数です。seed を指定しなかった場合は、システムが独自の可変の seed の値を生成します。seed の値を指定して RAND 関数を呼び出す場合は、可変の seed の値を使用して乱数を生成する必要があります。同じ seed の値を指定して RAND 関数を複数回呼び出すと、同じ値が返されます。次のスクリプトは同じ seed の値を指定しているので、同じ値を返します。

SELECT RAND(159784)
SELECT RAND(159784)
SELECT RAND(159784)

RAND 関数で乱数を生成する一般的な方法は、比較的可変の値を seed の値として指定する方法です。たとえば、次の例は GETDATE の複数の日付の要素を加算します。

SELECT RAND( (DATEPART(mm, GETDATE()) * 100000 )
           + (DATEPART(ss, GETDATE()) * 1000 )
           + DATEPART(ms, GETDATE()) )

GETDATE に基づくアルゴリズムを使用して seed の値を計算する場合でも、アルゴリズムで使用されている最小の日付の要素の間隔の中で RAND 関数を呼び出すと、重複した値が返されることがあります。特に、同じバッチ内で RAND 関数が複数回呼び出された場合は、重複した値が返される可能性があります。同じバッチ内で RAND 関数を複数回呼び出すと、同じミリ秒の間に関数が実行されます。これは DATEPART の最小増分です。この場合は、時刻以外の値も組み込んで seed 値を生成してください。

参照

その他の技術情報

RAND (Transact-SQL)
数学関数 (Transact-SQL)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手