由于我在this question中工作的测试查询方法没有解决,所以我正在尝试其他方法。有没有办法告诉pg的random()
函数让我只有1到10之间的数字?生成一个范围内的随机数1 - 10
回答
如果在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(随机()* 10)%10)+ 1
错误:运算符不存在:双精度%整数 – 2012-08-14 15:02:42
为什么你会使用模数呢?这个逻辑没有意义。如果你得到任何“包装”,你将不会有平等的分配,如果你没有得到任何,那么你不需要它。 – ErikE 2012-08-14 22:47:48
其实我不知道你想这一点。
试试这个
INSERT INTO my_table (my_column)
SELECT
(random() * 10) + 1
;
总结,有点简化,你可以使用:
-- 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;
[文档说](https://www.postgresql.org/docs/10/static/functions-math.html)“0.0 <= x <1.0”范围内的随机值,所以至少有一个理论'ceil(random()* 10)'产生0的机会 - 我会坚持'floor'。 – 2018-01-15 08:48:57
如果您正在使用SQL Server,那么正确的方式来获取整数是
SELECT Cast(RAND()*(b-a)+a as int);
凡
- 'b' 为上限
- 'a' 为下限
这里要小心,如果你把你的下限设为1,上限设为10,你只会得到数字1-> 9。其他答案似乎认为,1到10之间意味着1-> 9 ...我认为如果'之间'排除上限,它也应该排除下限(即2-> 9)。 SELECT Cast(RAND()*((b + 1)-a)+ a as int); – Morvael 2016-12-08 09:09:18
此存储的过程中插入一个兰特数插入表中。看,它插入一个无穷无尽的数字。当你得到足够的数字时停止执行它。
创建一个表指针:
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
创建和E XECUTING程序:
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
问题是关于Postgres,而不是SQL Server – 2017-01-27 08:59:29
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的整数输出。
对于任何数字(浮点数),请参阅user80168的答案。即只是不要将其转换为INTEGER
。
- 1. 如何生成10个随机数,范围为1到100?
- 2. 在随机字节的给定范围内生成随机数
- 3. Java在特定范围内生成一个随机数?
- 4. 如何在C范围内生成一个随机数?
- 5. 如何从范围从1开始生成js的随机数?
- 6. 随机数字生成器Javascript - 范围
- 7. 生成一个随机数落入多个范围
- 8. 使用C#在一个范围内产生一个随机数
- 9. 从大的范围内产生一个随机数,除了从大的范围
- 10. 如何生成给定范围内的随机数?VB.NET
- 11. 如何从一个范围内生成3个非重复的随机数字?
- 12. C++生成随机数-1
- 13. 生成10次随机数
- 14. Movable Type:如何生成一定范围的随机数?
- 15. 在excel中生成一个随机数字范围
- 16. 在[-1,1]范围内生成随机数组
- 17. 生成多个之间的随机数范围
- 18. 生成范围内的随机时间,并且是奇数
- 19. 用概率分布生成范围内的随机整数
- 20. 在iOS中生成范围内的随机数?
- 21. 范围内的随机(双值)数生成器
- 22. 如何在每个数字位于数字范围内生成随机数字?
- 23. 的javascript:从范围生成2个随机,但不同数字
- 24. 在集群环境中生成一个范围内(0-100k)的随机数
- 25. 如何在c中生成一个范围内的随机数字#
- 26. 使用php生成1到10之间的30个随机数
- 27. 如何在一个类构造函数内的一个设定范围内(不重复!)生成随机int数?
- 28. 获取用户输入的范围内的随机生成
- 29. 在C++中生成一个随机数,包括一个负范围
- 30. 生成两个范围之间的随机整数
从事件e中选择日期(e.created_at)+(trunc(random()* 20)); 结果在: 错误:运算符不存在:日期+双精度 trunc是否真的返回整数? – 2010-01-26 12:44:28
'trunc()'返回与输入相同的数据类型(如手册中所述)。你需要将结果转换为一个整数:'trunc(random()* 20):: int' – 2011-10-05 17:35:47
我想知道至少在理论上有可能'random()'返回一个小于1的值,乘以由于[双精度类型的不精确性质],9会大于9(http://www.postgresql.org/docs/9.1/static/datatype-numeric.html#DATATYPE-FLOAT)?在实践中,即使有可能,当然也不会因为15位或更精确的数字而消失。 – 2012-08-14 14:54:26