MySQL的指定范围随机数函数rand()的使用技巧

作者:mdxy-dxy 时间:2024-01-17 15:25:50 

公式如下:

rand() * (y-x) + x

咱们学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

这是一个很简单的数学算术式,用一个简单的例子,说了一下一些算法的基本技巧:降低要求使得自己所掌握的知识能达到需求。

标签:MySQL,指定范围,随机数
0
投稿

猜你喜欢

  • python实现SOM算法

    2023-05-27 03:18:42
  • python利用K-Means算法实现对数据的聚类案例详解

    2021-02-28 10:01:29
  • MySQL数据库生产环境的维护工作总结的经验

    2011-12-01 10:20:52
  • Python 迭代器Iterator详情

    2021-10-12 07:01:42
  • Python程序中设置HTTP代理

    2023-01-06 11:32:23
  • 使用python创建生成动态链接库dll的方法

    2021-02-13 22:18:21
  • Python urlopen()参数代码示例解析

    2021-05-22 18:26:14
  • 防止网上重复投票的方法

    2009-06-01 12:31:00
  • MySQL深分页问题解决的实战记录

    2024-01-18 21:32:36
  • django 连接数据库出现1045错误的解决方式

    2024-01-17 19:37:47
  • 系统存储过程,sp_executesql

    2024-01-23 10:28:12
  • PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结

    2024-05-03 15:53:21
  • Python脚本实现代码行数统计代码分享

    2023-02-26 00:24:13
  • 复制SqlServer数据库的方法

    2024-01-26 22:46:26
  • vue 下列表侧滑操作实例代码详解

    2024-04-30 10:19:36
  • Python设置Word全局样式和文本样式的示例代码

    2022-06-29 05:06:07
  • laravel清除视图缓存的代码

    2023-11-24 14:39:39
  • Python3 pyecharts生成Html文件柱状图及折线图代码实例

    2022-03-17 01:01:46
  • python使用pyshp读写shp文件的实现

    2023-10-02 04:07:13
  • python使用itchat模块给心爱的人每天发天气预报

    2023-04-12 00:34:26
  • asp之家 网络编程 m.aspxhome.com