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/
备注:本文版权归作者所有,欢迎转载和添加作者微信探讨技术,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。