根據官方文件,rand()的取值範圍為[0,1)
若要在i ≤ r ≤ j 這個範圍得到乙個隨機整數r ,需要用到表示式floor(i + rand() * (j – i + 1))
例如, 若要在7 到 12 的範圍(包括7和12)內得到乙個隨機整數, 可使用以下語句:
select floor(7 + (rand() * 6));
另外,也可以用round四捨五入函式來實現,考慮到最前與最後的取值概率會與中間的不相等,故加上0.5來消除這種概率上的差異,達到均勻分布:
產生[i,j]範圍正整數:select round(rand()*(j-i+1)+i-0.5)
若要在7 到 12 的範圍(包括7和12)內得到乙個隨機整數, 可使用以下語句:
select round( (rand() * 6+6.5));
如果產生負整數的話得注意最左邊的值有可能會超過你的要求:
mysql> select round(-0.5); +-------------+ | round(-0.5) | +-------------+ | -1 | +-------------+ 1 row in set (0.00sec) mysql> select round(-0.4); +-------------+ | round(-0.4) | +-------------+ | 0 | +-------------+ 1 row in set (0.00 sec)
可以在產生正整數的情況下再減去乙個相應的值,得到乙個負整數範圍,不過用floor函式可以避免上面的問題。
在mysql中可以執行如下命令檢視某個主題的說明文件,即? 主題,如下:
mysql> ? randname: 'rand'
description:
syntax:
rand(), rand(n)
returns a random floating-point value v in therange 0 <= v < 1.0
. if a
constant integer argument n is specified, it is used as the seed value,
which produces a repeatable sequence of column values. in the following
example, note that the sequences of values produced by rand(3) is the
same both places where it occurs.
url:
examples:
mysql> create table t (i int);
query ok, 0 rows affected (0.42 sec)
mysql> insert into t values(1),(2),(3);
query ok, 3 rows affected (0.00 sec)
records: 3 duplicates: 0 warnings: 0
mysql> select i, rand() from t;
+------+------------------+
| i | rand() |
+------+------------------+
| 1 | 0.61914388706828 |
| 2 | 0.93845168309142 |
| 3 | 0.83482678498591 |
+------+------------------+
3 rows in set (0.00 sec)
mysql> select i, rand(3) from t;
+------+------------------+
| i | rand(3) |
+------+------------------+
| 1 | 0.90576975597606 |
| 2 | 0.37307905813035 |
| 3 | 0.14808605345719 |
+------+------------------+
3 rows in set (0.00 sec)
mysql> select i, rand() from t;
+------+------------------+
| i | rand() |
+------+------------------+
| 1 | 0.35877890638893 |
| 2 | 0.28941420772058 |
| 3 | 0.37073435016976 |
+------+------------------+
3 rows in set (0.00 sec)
mysql> select i, rand(3) from t;
+------+------------------+
| i | rand(3) |
+------+------------------+
| 1 | 0.90576975597606 |
| 2 | 0.37307905813035 |
| 3 | 0.14808605345719 |
+------+------------------+
3 rows in set (0.01 sec)
mysql rand 產生隨機整數範圍及方法
根據官方文件,rand 的取值範圍為 0,1 若要在i r j 這個範圍得到乙個隨機整數r 需要用到表示式floor i rand j i 1 例如,若要在7 到 12 的範圍 包括7和12 內得到乙個隨機整數,可使用以下語句 select floor 7 rand 6 另外,也可以用round四捨...
mysql rand隨機查詢記錄效率
mysql rand隨機查詢記錄效率 一直以為mysql隨機查詢幾條資料,就用 select from table order by rand limit 5 就可以了。但是真正測試一下才發現這樣效率非常低。乙個15萬餘條的庫,查詢5條資料,居然要8秒以上 檢視官方手冊,也說rand 放在order...
用c 產生隨機整數與小數
c 庫有乙個名為 rand 的函式,每次呼叫該函式都將返回乙個非負整數。randomnum rand 隨機數大小是在0到rand max,值為2147483647。要使用 rand 函式,必須在程式中包含 標頭檔案。需要注意的是,rand 函式返回的數字其實是偽隨機數,實際上並不是隨機的,它們實際上...