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