1、在 MySQL 裡,随機數函數 rand 不能傳參,産生的 0 到 1 之間的浮點數,要是我們需要在 MySQL 産生大于 1 的随機整數,該怎麼辦呢?
- 這樣的需求并不陌生,例如,咱做的文章系統,需要作弊,給文章的浏覽量随機加上某個範圍内的整數。
- 現在,假設需要産生 234 到 5678 之間的随機整數,MySQL 下怎麼實作。
- 我們無法改 MySQL 下 rand 的産生值,但我們可以改變我們的需求
- 我們需要最小是 234,最大是 5678,rand 産生的最小是 0,最大是 1,我們需求的數減去 234 看看?
- 最小數 234 - 234 = 0,最大數5678 - 234 = 5444;嘿,亮點,我們需求的最小數跟rand産生的最小吻合了。
- 我們隻要讓函數産生 0 到 5444 的随機數,再拿來加上 234,就是我們原需求了。
- 我們原需求用個僞表達式來描述,就會是
取整(rand(0,5444) + 234)
- 現在隻要想辦法将我們需求再變一下,使得最小數為 0 不變,最大數變化成 1。
- 很明顯,5444 減去 5443 就是 1 了,但這樣,最小數就會是負數了。
- 要最小數還是 0,最大數是1,太簡單,5444 / 5444 = 1,0 /5444 = 0
- 現在,原需求的僞表達式就是:
取整(rand(0,1) * 5444 + 234)
- 把僞表達式的參數去掉,就跟 MySQL 下的 rand 一樣寫法,一樣效果。取整函數我們使用四舍五入 round() 或者使用 floor()/ceil()
- 是以,我們原需求的最終真 MySQL 表達式就是
ROUND(RAND() * 5444 + 234)
select floor(rand()*6);
作者:多測師進階講師_鄭sir
微信:ZhengYing8887
出處:https://www.cnblogs.com/ZhengYing0813/
備注:本文版權歸作者所有,歡迎轉載和添加作者微信探讨技術,但未經作者同意必須在文章頁面給出原文連結,否則保留追究法律責任的權利。