SQL Serverで列をランダム値で埋める:同じ値が重複しないように
SQL Serverで列をランダムな数値で埋める方法:同じ値が重複しないように
この問題を解決するには、以下の2つの方法があります。
RAND()
関数にシード値を設定することで、毎回異なる乱数シーケンスを生成することができます。シード値には、テーブルの主キー列など、一意な値を使用します。
UPDATE your_table
SET your_column = RAND(your_seed_column)
上記の例では、your_seed_column
列の値をシード値として使用し、your_column
列にランダムな数値を生成しています。
方法2:NEWID() 関数を使用する
NEWID()
関数は、128ビットのランダムなGUIDを生成します。GUIDは、一意であることを保証されているため、同じ値が重複することはありません。
UPDATE your_table
SET your_column = CONVERT(INT, SUBSTRING(NEWID(), 1, 4))
上記の例では、NEWID()
関数によって生成されたGUIDの先頭4文字を整数に変換し、your_column
列に格納しています。
補足
- ランダムな数値の範囲を制限したい場合は、
RAND()
関数と算術演算子を組み合わせて使用することができます。例えば、0から100までのランダムな整数を生成するには、次のようにします。
RAND() * 100
- 重複を避けるために、
INSERT
ステートメント内でランダムな値を生成することもできます。例えば、次のようにします。
INSERT INTO your_table (your_column)
VALUES (RAND(your_seed_column))
この方法では、UPDATE
ステートメントを使用するよりも効率的にランダムな値を生成することができます。
これらの方法を参考に、状況に合わせて適切な方法を選択してください。
方法 1:RAND() 関数にシード値を設定する
UPDATE Sales
SET OrderDate = DATEADD(DAY, FLOOR(RAND() * 365), '2018-01-01')
WHERE OrderDate IS NULL;
このコードは、以下のことを行います。
RAND()
関数を使用して、0 から 364 までのランダムな整数を生成します。- 生成された整数を
FLOOR()
関数を使用して、小数点以下の部分を切り捨てます。 - 切り捨てた値を
DAY
間隔としてDATEADD()
関数に渡します。 '2018-01-01'
を基点として、新しい日付を計算します。OrderDate
列が NULL の行のみを更新します。
方法 2:NEWID() 関数を使用する
UPDATE Sales
SET OrderDate = CONVERT(DATE, SUBSTRING(NEWID(), 11, 10))
WHERE OrderDate IS NULL;
NEWID()
関数を使用して、128ビットのランダムなGUIDを生成します。- 生成されたGUIDの先頭10文字を
SUBSTRING()
関数を使用して抽出し、文字列に変換します。 - 文字列を
CONVERT()
関数を使用して、日付に変換します。
この 2 つの例は、SQL Server で列をランダムな値で埋める方法を 2 通り示しています。状況に合わせて適切な方法を選択してください。
SQL Serverで列をランダムな値で埋める方法:その他の方法
方法3:sp_random プロシージャを使用する
sp_random
プロシージャは、SQL Server に組み込まれたストアドプロシージャで、ランダムな値を生成することができます。このプロシージャは、シード値、最小値、最大値などの引数を受け取ることができます。
DECLARE @seed INT, @min INT, @max INT;
SET @seed = 12345;
SET @min = 10;
SET @max = 100;
EXEC sp_random @seed, @min, @max, @result;
UPDATE your_table
SET your_column = @result
WHERE your_column IS NULL;
上記の例では、sp_random
プロシージャを使用して、10 から 100 までのランダムな整数を生成し、your_column
列に格納しています。
方法4:外部ライブラリを使用する
SQL Server には、ランダムな値を生成するための外部ライブラリがいくつか用意されています。これらのライブラリは、より複雑なランダム値生成機能を提供することがあります。
方法5:カスタム関数を
独自の要件を満たすために、カスタム関数を作成することもできます。
CREATE FUNCTION dbo.RandomDate(@minDate DATETIME, @maxDate DATETIME)
RETURNS DATETIME
AS
BEGIN
DECLARE @randomDays INT;
SET @randomDays = FLOOR(RAND() * DATEDIFF(DAY, @minDate, @maxDate));
RETURN DATEADD(DAY, @randomDays, @minDate);
END;
UPDATE your_table
SET your_column = dbo.RandomDate('2018-01-01', '2019-12-31')
WHERE your_column IS NULL;
上記の例では、dbo.RandomDate
というカスタム関数を作成し、指定された範囲内のランダムな日付を生成しています。
これらの方法は、より高度な要件を満たす場合に役立ちます。
sql-server