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);

 

posted @ 2021-04-11 19:44  一个老宅男  阅读(882)  评论(0编辑  收藏  举报