RAND() 亂數

RAND()
RAND(N)
  • N傳入的數值

回傳一個隨機浮點數v,範圍在 0 到1 之間 ( 0 ≤ v ≤ 1.0)。若已指定一個整數參數 N ,則它被用作種子值,用來產生相同的亂數。
mysql> SELECT RAND();
-> 0.9233482386203

mysql> SELECT RAND(20);
-> 0.15888261251047

mysql> SELECT RAND(20);
-> 0.15888261251047

mysql> SELECT RAND();
-> 0.63553050033332

mysql> SELECT RAND();
-> 0.70100469486881

mysql> SELECT RAND(20);
-> 0.15888261251047

若要在i ≤ R ≤ j 這個範圍得到一個隨機整數 R,需要用到運算式 FLOOR(i + RAND() * (j – i + 1))。例如,若要在7 到 12 的範圍(包括7和12)內得到一個隨機整數, 可使用以下語句:
SELECT FLOOR(7 + (RAND() * 6));
在ORDER BY語句中,不能使用一個帶有RAND()值的列,原因是 ORDER BY 會計算列的多重時間。然而,可按照如下方式取得檢索結果的隨機順序:
SELECT * FROM tbl_name ORDER BY RAND();
可以使用ORDER BY RAND()結合 LIMIT 達到從資料行中隨機取樣:
SELECT * FROM table1, table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000;
注意,在WHERE語句中,WHERE每執行一次,RAND()就會被再計算一次。
RAND()不能當作一個完美的亂數產生器(永遠不會重覆),而是在不同MySQL版本平台之間可相容,可以快速產生ad hoc亂數的產生器。

沒有留言: