【问题标题】:Get random number between 65 to 122获取 65 到 122 之间的随机数
【发布时间】:2013-12-23 13:53:33
【问题描述】:

我想获得 65 到 122 之间的随机数。我正在使用这个查询

SELECT (FLOOR(65 + RAND() * 122));

在得到 this question 的帮助后,但它给我的数字超出了 65-122 的范围。
请帮忙。谢谢

【问题讨论】:

标签: mysql sql random


【解决方案1】:
SELECT (FLOOR(65 + RAND() * 57));

Rand 提供了一个介于 0-1 之间的数字。像0,75。 所以如果你想得到一个介于 65 和 122 之间的数字,那么:

65 = 65+0*57
122 = 65+1*57

【讨论】:

    【解决方案2】:

    我想你想要的是

    65 + 楼层(兰德()* 57)

    至少 65 加上 0-57 的随机数,所以在高端,65 + 57 = 122

    【讨论】:

      【解决方案3】:

      一个典型的写法是:

      select 65 + FLOOR( RAND() * (122 - 65))
      

      这样写可以很容易地看到极值。

      顺便说一句,你的问题有点不清楚是否包括 122。根据具体情况,公式会略有不同。

      【讨论】:

      • +1 这个应该是公认的答案。因为这个解释了下限和上限背后最简单的计算
      【解决方案4】:

      RAND() 返回一个介于 0 和 1 之间的随机数,因此 65 + RAND() * 122 等于最小值/最大值:

      MIN: 65 + 0 * 122 = 65 + (0 * 122) = 65 + 0 = 65
      MAX: 65 + 1 * 122 = 65 + (1 * 122) = 65 + 122 = 187
      

      因此您真正想要的是 57 而不是 122122 - 65 = 57

      现在最小值/最大值是:

      MIN: 65 + 0 * 57 = 65 + (0 * 57) = 65 + 0 = 65
      MAX: 65 + 1 * 57 = 65 + (1 * 57) = 65 + 57 = 122
      

      或者,您可以使用以下自定义函数:

      DELIMITER //
      
      CREATE FUNCTION RAND_BETWEEN(min FLOAT, max FLOAT) 
          RETURNS FLOAT
          BEGIN
              RETURN min + ((max - min) * RAND());
          END//
      
      DELIMITER ;
      

      用法:

      SELECT RAND_BETWEEN(60, 120)        # eg. 115.81029510498047
      SELECT RAND_BETWEEN(0, 150)         # eg. 62.729270935058594
      SELECT RAND_BETWEEN(10000, 10005)   # eg. 10004.9560546875
      SELECT FLOOR( RAND_BETWEEN(5, 10) ) # eg. 6
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-11
        • 2013-07-17
        • 2015-11-08
        • 1970-01-01
        • 2018-10-16
        • 2014-06-09
        • 1970-01-01
        相关资源
        最近更新 更多