如何获得两个值之间的随机数?
在 amínimo
和 amáximo
之间,例如,和之间的1
数字10
尝试做一个SELECT
并使用RAND()
:
SELECT RAND() as aleatorio
但我不知道如何指示范围,因为以下不起作用:
SELECT RAND(1, 10) as aleatorio
我收到以下错误:
#1582 - 调用本机函数 'RAND' 中的参数计数不正确
如何获得两个值之间的随机数?
在 amínimo
和 amáximo
之间,例如,和之间的1
数字10
尝试做一个SELECT
并使用RAND()
:
SELECT RAND() as aleatorio
但我不知道如何指示范围,因为以下不起作用:
SELECT RAND(1, 10) as aleatorio
我收到以下错误:
#1582 - 调用本机函数 'RAND' 中的参数计数不正确
如果我们考虑到函数返回的最大值和最小值
RAND()
:一种解决方案是使用以下公式:
小数结果选项:
如果我们想获得一个带小数的数字,那么我们可以这样做:
这将返回一个大于 1 且小于 10的数字
整数结果选项:
如果我们想得到一个整数,那么我们可以使用:
FLOOR()
: 我们会得到一个大于 1 小于 10的整数。CEIL()
: 我们会得到一个大于 1 小于 10的整数。ROUND()
: 我们会得到一个大于 1 小于 10的整数。例子:
观察:
PostgreSQL
不存在rand()
,但random()
和操作相同。SQLServer
:ROUND
,即小数位数ROUND(x, y)
在哪里y
。CEIL()
, 但是CEILING
,它的工作原理是一样的。该函数
RAND()
不是生成随机数的好选择,因为它总是在查询中返回相同的数字。我们可以通过执行以下代码来检查:更好的选择是用来
NEWID()
生成随机值。要获得整数,我们只需添加CHECKSUM()
. 为了使它们始终是积极的,我们添加ABS()
。为了生成一个范围,我们使用具有范围宽度的模数并将初始值添加到它。因此,公式如下所示:说明:此解决方案适用于 SQL Server。它尚未与其他 RDBMS 一起测试过。之所以提出它是因为该问题包括 4 个不同的 RDBMS。
此解决方案适用于Oracle。
参考:108 DBMS_RANDOM
这对我有用: SELECT FLOOR( i + RAND() * ( f - i + 1 ) );
示例:我们将获得 [5,10] 之间的随机值,其中:
我=5
f=10