生成范围为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 。