mysql rand 產生隨機整數範圍及方法

2022-05-22 02:18:12 字數 2989 閱讀 2835

根據官方文件,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> ? rand

name: '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 函式返回的數字其實是偽隨機數,實際上並不是隨機的,它們實際上...