【问题标题】:creating a random number using MYSQL使用 MYSQL 创建随机数
【发布时间】:2013-01-25 18:11:12
【问题描述】:

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

例如:SELECT name, address, random_number FROM users

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

我尝试过类似的方法,但它无法正常工作..

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

希望有人帮助我。 谢谢

【问题讨论】:

标签: mysql sql


【解决方案1】:

这应该给你想要的:

FLOOR(RAND() * 401) + 100

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

更新

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

SELECT name, address, FLOOR(RAND() * 401) + 100 AS `random_number` 
FROM users

【讨论】:

  • 我如何使用此代码。我试过这样 - FLOOR(RAND() * 401) + 100 作为数字,但不起作用
  • 注意:我的数据库中没有名为“数字”的列。这必须是动态生成的列。有可能吗?
  • @EdHeal 实际上我认为round() 会给出不均匀的分布。
  • 如果您有主从复制,最好将结果存储到变量中并使用该变量。 SET @r=FLOOR(RAND() * 401) + 100,然后是SELECT @r
  • RAND(), UUID(), NOW() 是不确定的函数。此类函数的调用应避免写入bin log进行复制。例如。 INSERT INTO t SET ID=UUID(); 将导致 ID 字段的值在主服务器和从服务器上不同。相反,它需要写为SET @uuid:=UUID();,然后是INSERT INTO t SET ID=@uuid;,然后在单个事务中运行它们。这将是复制安全的。对于这个问题,这有点偏离主题。它并没有说你的答案有任何问题。 :)
【解决方案2】:

由于RAND 产生一个数字 0 documentation),您需要使用ROUND 来确保您可以获得上限(在本例中为 500)和下限(100在这种情况下)

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

SELECT name, address, ROUND(100.0 + 400.0 * RAND()) AS random_number
FROM users

【讨论】:

  • 此编码的工作方式如下 - SELECT ROUND(100.0 + 400.0 * RAND()) AS random_number,但现在使用我的查询
  • random_number 列必须与我的查询一起随机生成。
  • 这种方法会降低第一个和最后一个数字的可能性。
【解决方案3】:

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

的函数
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 之间的随机数

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      这两个都很好用:

      select round(<maxNumber>*rand())
      

      FLOOR(RAND() * (<max> - <min> + 1)) + <min> // generates a number
      between <min> and <max> inclusive.
      

      【讨论】:

        【解决方案6】:

        这是查找从ij 的整数的正确公式,其中i &lt;= R &lt;= j

        FLOOR(min+RAND()*(max-min))
        

        【讨论】:

        • 这是错误的,它永远不会产生 j(或 max)。它产生一个数字 i
        • 应该是:FLOOR(min+RAND()*(max-min+1))
        猜你喜欢
        • 1970-01-01
        • 2021-12-14
        • 1970-01-01
        • 2015-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多