MySQL的指定范围随机数函数rand()的使⽤技巧
公式如下:
rand() * (y-x) + x
truncatedelete和drop的区别咱们学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
这是⼀个很简单的数学算术式,⽤⼀个简单的例⼦,说了⼀下⼀些算法的基本技巧:降低要求使得⾃⼰所掌握的知识能达到需求。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论