2013-02-10 128 views
72

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

如:SELECT name, address, random_number FROM users

我没有这个号码存储在数据库,并只用它来显示的目的。

我试了这样的事情,但它不能去工作..

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

希望有人帮助我。 谢谢

+1

之间链接 http:// stackove rflow.com/questions/1045138/how-do-i-generate-random-number-for-each-row-in-a-tsql-select – DevelopmentIsMyPassion 2013-02-10 14:23:11

回答

115

这应该给你想要的东西:

FLOOR(RAND() * 401) + 100 

一般地,FLOOR(RAND() * (<max> - <min> + 1)) + <min>产生了一些<min之间>和<max>包容性。

更新

该声明全文应该工作:

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

我如何使用此代码。我试过这样 - FLOOR(RAND()* 401)+ 100作为数字,但不起作用 – TNK 2013-02-10 14:22:43

+0

注意:我的数据库中没有名为'number'的列。这必须是动态生成的列。它是可行的吗? – TNK 2013-02-10 14:24:52

+1

使用FLOOR不会生成均匀分布。 – 2013-02-10 14:30:13

3

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

8

作为RAND产生数0 < = V < 1.0(见documentation),你需要使用ROUND,以确保您可以(在这种情况下500)获得上限和(在这种情况下100)下界

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

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

这种编码工作是这样的 - SELECT ROUND(100.0 + 400.0 * RAND())AS random_number,但现在使用我的查询 – TNK 2013-02-10 14:32:58

+0

random_number列必须随我的查询随机生成列。 – TNK 2013-02-10 14:39:15

+0

该方法将使第一个和最后一个数字的可能性降低。 – 2017-05-01 16:25:25

0

这是正确的公式来找到i整数j其中i <= R <= j

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

这是错误的,它永远不会产生j(或max)。它产生一个数字i <= R jlh 2015-10-08 20:55:16

+1

应该是:'FLOOR(min + RAND()*(max-min + 1))' – 2016-02-04 17:40:14

+1

@DavidRodrigues简单而且很棒的作品,谢谢。 – noinput 2016-09-14 03:41:52

4

附加到这个答案,创造像

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