2013-02-10 127 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