国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL的指定范圍隨機數函數rand()的使用技巧

2024-07-24 12:53:38
字體:
來源:轉載
供稿:網友

公式如下:

rand() * (y-x) + x

咱們學php的都知道,隨機函數rand或mt_rand,可以傳入一個參數,產生0到參數之間的隨機整數,也可以傳入兩個參數,產生這兩個參數之間的隨機整數。
而在mysql里,隨機數函數rand不能傳參,產生的0到1之間的浮點數,要是我們需要在mysql產生大于1的隨機整數,該怎么辦呢?
這樣的需求并不陌生,例如,咱做的文章系統,需要作弊,給文章的瀏覽量隨機加上某個范圍內的整數。

現在,假設需要產生234到5678之間的隨機整數,mysql下怎么實現。

我們無法改mysql下rand的產生值,但我們可以改變我們的需求,

1、我們需要最小是234,最大是5678,rand產生的最小是0,最大是1,我們需求的數減去234看看?

最小數234 - 234 = 0,最大數5678 - 234 = 5444;嘿,亮點,我們需求的最小數跟rand產生的最小吻合了。
我們只要讓函數產生0到5444的隨機數,再拿來加上234,就是我們原需求了。
我們原需求用個偽表達式來描述,就會是
取整(rand(0,5444) + 234)

2、現在只要想辦法將我們需求再變一下,使得最小數為0 不變,最大數變化成1,
很明顯,5444減去5443就是1了,但這樣,最小數就會是負數了。
要最小數還是0,最大數是1,太簡單,5444 / 5444 = 1 , 0 /5444 = 0
現在,原需求的偽表達式就是:
取整(rand(0,1) * 5444 + 234)
3、把偽表達式的參數去掉,就跟mysql下的rand一樣寫法,一樣效果。取整函數我們使用四舍五入ROUND
所以,我們原需求的最終真mysql表達式就是
ROUND(RAND() * 5444 + 234)

總結一下思路:
1、比較rand(x, y)與rand(0,1)的差異。
2、將rand(x,y)逐步向rand(0,1)變換
rand(x,y)
= rand(0, (y-x)) + x
= rand(0/(y-x), (y-x)/(y-x)) * (y-x) +x
= rand() * (y-x) + x

這是一個很簡單的數學算術式,用一個簡單的例子,說了一下一些算法的基本技巧:降低要求使得自己所掌握的知識能達到需求。

您可能感興趣的文章:

MySQL查詢隨機數據的4種方法和性能對比從MySQL數據庫表中取出隨機數據的代碼mysql獲取隨機數據的方法mysql優化取隨機數據慢的方法mysql 某字段插入隨機數(插入隨機數到MySQL數據庫)詳解MySQL中concat函數的用法(連接字符串)Python連接MySQL并使用fetchall()方法過濾特殊字符sqlserver、mysql獲取連接字符串步驟PHP 設置MySQL連接字符集的方法MySQL產生隨機數并連接字符串的方法示例
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁波市| 南木林县| 辽中县| 贺州市| 尼玛县| 会宁县| 个旧市| 上林县| 出国| 崇仁县| 青神县| 九江市| 吴川市| 普兰县| 新和县| 高台县| 平山县| 通河县| 诸城市| 肇州县| 和林格尔县| 柳江县| 青浦区| 拜城县| 遂昌县| 万山特区| 红原县| 兴国县| 新龙县| 沁水县| 广丰县| 福安市| 新乡市| 巴林右旗| 多伦县| 瓦房店市| 阿拉善右旗| 钟山县| 昔阳县| 苏尼特右旗| 九台市|