MySQL 如何在两个值之间随机获取一个值?

MySQL 如何在两个值之间随机获取一个值?

有时我们需要在两个确定的值之间随机获取一个值,MySQL 中提供了一个方便的函数 RAND() 来生成一个大于等于 0,小于 1 的随机浮点数。那么如何将这个随机数映射到两个值之间呢?

比较常规的方法是使用 RAND() 函数生成一个随机数,然后通过一系列的计算表达式将其映射到目标区间。如下:

SELECT FLOOR(RAND() * (b-a+1) + a) AS random_value
FROM your_table
WHERE some_condition;
SQL

以上 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] 这个区间随机生成一个整数,可以使用以下查询语句:

SELECT FLOOR(RAND() * (20-10+1) + 10) AS random_value;
SQL

或者我们要生成一个在 (1.23, 4.56) 区间的浮点数:

SELECT RAND() * (4.56-1.23) + 1.23 AS random_value;
SQL

阅读更多:MySQL 教程

总结

RAND() 函数可以帮助我们在 MySQL 中生成随机数,结合一些计算表达式,我们可以将随机数映射到指定的区间内。在使用过程中需要注意上述所说的情况和问题。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册