2013-12-23 25 views
0

我想在65到122.I随机数的随机数正在使用此查询
之间获得65至122

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

this question得到帮助之后,但它给我的65范围之外的数字-122。
请help.Thanks

+0

因为RAND可以生成1 * 122 + 65 = 187 – sdespont

+0

我们已经有解决方案在http://stackoverflow.com/questions/14798640/creating-a-random-number-using-mysql –

回答

2
SELECT (FLOOR(65 + RAND() * 57)); 

兰德提供0-1之间的数字。像0,75一样。 所以,如果你想获得一些介乎65和122那么:

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

我想你想要的是

65 + FLOOR(RAND()* 57)

最小的65 PLUS随机的0-57,所以在高端,65 + 57 = 122

1

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而不是122作为122 - 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 
1

的典型方式写这个是:

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

用这种方式书写,可以让您轻松查看极值。

顺便说一下,您的问题是否包含122是不清楚的。公式会因此而稍有不同。

+0

+1和这个应该成为被接受的anwser ..因为这个解释了在最低和最高界限之后的最简单的计算 –