生成范围为1 – 10的随机数

由于我在这个问题上所做的testing查询的方法没有解决,所以我正在尝试其他的东西。 有没有办法告诉pg的random()函数让我只有1到10之间的数字?

如果通过1到10之间的数字表示任何> = 1和<10的浮点数,则很容易:

 select random() * 9 + 1 

这可以很容易地testing:

 # 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) 

再次,简单的testing:

 # 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) 

总结和简化一下,你可以使用:

 -- 0 - 9 select floor(random() * 10); -- 0 - 10 SELECT floor(random() * (10 + 1)); -- 1 - 10 SELECT ceil(random() * 10); 

你可以像@ user80168提到的那样testing它

 -- 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; 

如果你正在使用SQL Server,那么正确的方式来获取整数是

 SELECT Cast(RAND()*(ba)+a as int); 

哪里

  • 'b'是上限
  • 'a'是下限

(trunc(random()* 10)%10)+ 1

其实我不知道你想要这个。

尝试这个

 INSERT INTO my_table (my_column) SELECT (random() * 10) + 1 ; 

此存储过程将一个rand数插入到一个表中。 看,它插入一个无休止的数字。 当你得到足够的数字时停止执行它。

为光标创build一个表格:

 CREATE TABLE [dbo].[SearchIndex]( [ID] [int] IDENTITY(1,1) NOT NULL, [Cursor] [nvarchar](255) NULL) 

创build一个表来包含你的数字:

 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 

创build和执行程序:

 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 

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]范围内生成INTEGER输出,即包含1和10。

对于任何数字(浮点数),请参阅user80168的答案。 即只是不要将其转换为INTEGER