102

我想知道是否有一种方法可以选择 100 到 500 之间随机生成的数字以及选择查询。

例如:SELECT name, address, random_number FROM users

我不必将此数字存储在数据库中,仅用于显示目的。

我试过这样的东西,但它无法工作..

SELECT name, address, FLOOR(RAND() * 500) AS random_number FROM users

希望有人帮助我。谢谢

4

6 回答 6

155

这应该给你想要的:

FLOOR(RAND() * 401) + 100

通常,FLOOR(RAND() * (<max> - <min> + 1)) + <min>生成介于<min> 和(<max>含)之间的数字。

更新

这个完整的声明应该有效:

SELECT name, address, FLOOR(RAND() * 401) + 100 AS `random_number` 
FROM users
于 2013-02-10T14:20:35.433 回答
11

AsRAND产生一个数字 0 <= v < 1.0 (请参阅文档),您需要使用它ROUND来确保您可以获得上限(在这种情况下为 500)和下限(在这种情况下为 100)

所以要产生你需要的范围:

SELECT name, address, ROUND(100.0 + 400.0 * RAND()) AS random_number
FROM users
于 2013-02-10T14:28:09.593 回答
5

除了这个答案,创建一个类似的函数

CREATE FUNCTION myrandom(
    pmin INTEGER,
    pmax INTEGER
)
RETURNS INTEGER(11)
DETERMINISTIC
NO SQL
SQL SECURITY DEFINER
BEGIN
  RETURN floor(pmin+RAND()*(pmax-pmin));
END; 

并打电话给

SELECT myrandom(100,300);

这为您提供了 100 到 300 之间的随机数

于 2016-03-15T16:58:07.443 回答
3

您可以使用(n 是一个整数)创建一个随机数FLOOR(RAND() * n) as randnum,但是如果您不需要重复相同的随机数,那么您将不得不在一些临时表中存储。所以你可以检查它与where randnum not in (select * from temptable)...

于 2013-02-10T14:24:48.660 回答
3

这些都运行良好:

select round(<maxNumber>*rand())

FLOOR(RAND() * (<max> - <min> + 1)) + <min> // generates a number
between <min> and <max> inclusive.
于 2018-11-01T11:43:47.660 回答
0

i这是从j哪里找到整数的正确公式i <= R <= j

FLOOR(min+RAND()*(max-min))
于 2014-03-27T11:29:37.027 回答