回答:
1と10の間の数値で、1以上かつ10未満のフロートを意味する場合、それは簡単です。
select random() * 9 + 1
これは以下で簡単にテストできます:
# select min(i), max(i) from (
select random() * 9 + 1 as i from generate_series(1,1000000)
) q;
min | max
-----------------+------------------
1.0000083274208 | 9.99999571684748
(1 row)
> = 1と<10の整数が必要な場合、それは簡単です:
select trunc(random() * 9 + 1)
また、簡単なテスト:
# select min(i), max(i) from (
select trunc(random() * 9 + 1) as i from generate_series(1,1000000)
) q;
min | max
-----+-----
1 | 9
(1 row)
trunc()
マニュアルに記載されているように、入力と同じデータ型を返します。あなたは整数に結果をキャストする必要がありますtrunc(random() * 20)::int
random()
ために、9を掛けると> = 9になる値<1を返す可能性があるのでしょうか。実際には、可能であっても、15桁程度の精度があるため、もちろんそれはほとんどありません。
要約して少し単純にするために、以下を使用できます。
-- 0 - 9
select floor(random() * 10);
-- 0 - 10
SELECT floor(random() * (10 + 1));
-- 1 - 10
SELECT ceil(random() * 10);
そして、あなたは@ user80168によって言及されたようにこれをテストすることができます
-- 0 - 9
SELECT min(i), max(i) FROM (SELECT floor(random() * 10) AS i FROM generate_series(0, 100000)) q;
-- 0 - 10
SELECT min(i), max(i) FROM (SELECT floor(random() * (10 + 1)) AS i FROM generate_series(0, 100000)) q;
-- 1 - 10
SELECT min(i), max(i) FROM (SELECT ceil(random() * 10) AS i FROM generate_series(0, 100000)) q;
SELECT floor(random() * 10 + 1);
SQL Serverを使用している場合、整数を取得する正しい方法は次のとおりです。
SELECT Cast(RAND()*(b-a)+a as int);
どこ
(trunc(random()* 10)%10)+ 1
hythlodayrの回答の正しいバージョン。
-- ERROR: operator does not exist: double precision % integer
-- LINE 1: select (trunc(random() * 10) % 10) + 1
からの出力trunc
はに変換する必要がありINTEGER
ます。しかし、それはなしで行うことができますtrunc
。したがって、それは単純であることがわかります。
select (random() * 9)::INTEGER + 1
範囲[1、10]、つまり1と10の両方でINTEGER出力を生成します。
任意の数値(float)については、user80168の回答を参照してください。つまり、単にに変換しないでくださいINTEGER
。
このストアドプロシージャは、ランド番号をテーブルに挿入します。見てください、それは無限の数を挿入します。十分な数を取得したら、実行を停止します。
カーソルのテーブルを作成します。
CREATE TABLE [dbo].[SearchIndex](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Cursor] [nvarchar](255) NULL)
GO
数値を含むテーブルを作成します。
CREATE TABLE [dbo].[ID](
[IDN] [int] IDENTITY(1,1) NOT NULL,
[ID] [int] NULL)
スクリプトの挿入:
INSERT INTO [SearchIndex]([Cursor]) SELECT N'INSERT INTO ID SELECT FLOOR(rand() * 9 + 1) SELECT COUNT (ID) FROM ID
手順の作成と実行:
CREATE PROCEDURE [dbo].[RandNumbers] AS
BEGIN
Declare CURSE CURSOR FOR (SELECT [Cursor] FROM [dbo].[SearchIndex] WHERE [Cursor] IS NOT NULL)
DECLARE @RandNoSscript NVARCHAR (250)
OPEN CURSE
FETCH NEXT FROM CURSE
INTO @RandNoSscript
WHILE @@FETCH_STATUS IS NOT NULL
BEGIN
Print @RandNoSscript
EXEC SP_EXECUTESQL @RandNoSscript;
END
END
GO
あなたのテーブルを埋めてください:
EXEC RandNumbers