MySQL 如何在两个值之间随机获取一个值?
有时我们需要在两个确定的值之间随机获取一个值,MySQL 中提供了一个方便的函数 RAND()
来生成一个大于等于 0,小于 1 的随机浮点数。那么如何将这个随机数映射到两个值之间呢?
比较常规的方法是使用 RAND()
函数生成一个随机数,然后通过一系列的计算表达式将其映射到目标区间。如下:
以上 SQL 查询将在指定条件下生成一个大于等于 a
,小于等于 b
的随机整数。
在正常情况下,由于 RAND()
生成的随机数的值域为 [0,1),因此针对上述公式有两个问题需要特别注意:
- 如果 a = b,那么映射的结果只有一个值,即 a。此时公式
RAND() * (b-a+1)
的值都为 0,因此需要单独考虑,例如可以直接选取 a 值。 - 如果你想要生成一个大于等于 a,小于 b 的随机数,那么计算公式需要更改为
RAND() * (b-a) + a
,即将 a 加上一个随机浮点数乘以 (b-a) 的值域。
下面举个例子,比如我们需要在 [10, 20]
这个区间随机生成一个整数,可以使用以下查询语句:
或者我们要生成一个在 (1.23, 4.56)
区间的浮点数:
阅读更多:MySQL 教程
总结
RAND()
函数可以帮助我们在 MySQL 中生成随机数,结合一些计算表达式,我们可以将随机数映射到指定的区间内。在使用过程中需要注意上述所说的情况和问题。