天天看點

MySQL 的随機數函數 rand() 的使用技巧

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/

備注:本文版權歸作者所有,歡迎轉載和添加作者微信探讨技術,但未經作者同意必須在文章頁面給出原文連結,否則保留追究法律責任的權利。

繼續閱讀