咱们学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,就是我们原需求了。
我们原需求用个伪表达式来描述,就会是

  1. 取整(rand(0,5444) + 234)

2、现在只要想办法将我们需求再变一下,使得最小数为0 不变,最大数变化成1,
很明显,5444减去5443就是1了,但这样,最小数就会是负数了。
要最小数还是0,最大数是1,太简单,5444 / 5444 = 1 , 0 /5444 = 0
现在,原需求的伪表达式就是:

  1. 取整(rand(0,1) * 5444 + 234)

3、把伪表达式的参数去掉,就跟mysql下的rand一样写法,一样效果。取整函数我们使用四舍五入ROUND

所以,我们原需求的最终真mysql表达式就是

  1. 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

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

参考地址:https://blog.csdn.net/zhangfeng1133/article/details/49848257

MySQL的随机数函数rand()的使用技巧的更多相关文章

  1. SQL中随机数函数rand()简介

    转自:http://database.51cto.com/art/201009/224397.htm 下文将为您介绍SQL中的随机函数rand(),供您参考,如果您是才接触SQL Server的新手, ...

  2. C语言之随机数函数( rand() )的使用方法

    文章出自个人博客https://knightyun.github.io/2018/04/25/c-rand-number,转载请申明. 在程序设计中,难免会使用到随机值函数,其原理与语法大多类似,接下 ...

  3. sql server 获取随机数函数RAND()和RAND(x)

    --RAND(x)返回一个随机浮点值v,范围在0~1之间(即0<=v<=1.0) --若指定一个整数参数x,则它被用作种子值,使用相同的种子数将产生重复序列.如果同一种子值多次调用RAND ...

  4. PHP生成随机数函数rand(min,max)

    rand(min,max):生成min到max 的随机数,注意:包括边界rand() 返回 0 到 RAND_MAX 之间的伪随机整数.例如,想要 5 到 15(包括 5 和 15)之间的随机数,用 ...

  5. 【转】利用matlab生成随机数函数

    原文地址:利用matlab生成随机数函数 rand(n):生成0到1之间的n阶随机数方阵  rand(m,n):生成0到1之间的m×n的随机数矩阵 (现成的函数) betarnd:贝塔分布的随机数生成 ...

  6. 给定一个函数rand()能产生0到n-1之间的等概率随机数,问如何产生0到m-1之间等概率的随机数?

    题目:给定一个函数rand()能产生1到n之间的等概率随机数,问如何产生1到m之间等概率的随机数? 先把问题特殊化,例如原题变为给定一个函数rand5(),该函数可以随机生成1-5的整数,且生成概率一 ...

  7. PHP获取随机数的函数rand()和mt_rand()

    rand()函数用户获取随机数,具体用法如下: rand()可以设置0个参数或者两个参数,如rand($min,$max),$min表示从XX开始取值,$max表示最大只能为XX 例如: <?p ...

  8. 面试题:给定一个函数rand()能产生1到m之间的等概率随机数,产生1到n之间等概率的随机数?

    虽然TX的面试已经过去好几天了,然而惨痛的过程还历历在目.人生中第一次正式job面试就这么挂掉了.在于面试官的交流过程中,被问及了几个算法设计题,在今后几篇博文中,我一一总结与诸君分享. 1. 给定一 ...

  9. MySQL(5.6) 函数

    字符串函数 ASCII(str) 说明:返回字符串 str 最左边字符的 ASCII 值 mysql'); mysql); mysql> SELECT ASCII('a'); mysql> ...

随机推荐

  1. PyAutoGUI使用

    PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动控制鼠标和键盘操作,利用它可以实现自动化任务,再也不用担心有重复枯燥的任务了. 安装: pip install pyau ...

  2. mvc自定义分页(加页数的)(转)

    1.引言 在MVC开发中我们经常会对数据进行分页的展示.通过分页我们可以从服务端获取指定的数据来进行展示.这样既节约了数据库查询的时间也节约了网络传输的数据量.在MVC开发中使用的比较多的应该是MVC ...

  3. 深入理解MVC原理

    SpringMVC的工作原理图: SpringMVC流程 1.  用户发送请求至前端控制器DispatcherServlet. 2.  DispatcherServlet收到请求调用HandlerMa ...

  4. java多线程探究

    本文主要是一些线程理论性的知识,随后将贴出研究的源码,包含线程池,锁,线程组等简单的demo,欢迎大家下载1.进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程 ...

  5. pycharm的断点调试与TODO标记

    断点调试的方法: 断点调试在程序比较大的时候调试运用的比较多 点击Pycharm软件右上角绿色三角形右边的小甲鱼图标,点击之后会弹出断点调试的界面 Debug是用来调试bug的 terminal 是终 ...

  6. 爬取豆瓣电影影评,生成wordcloud词云,并利用监督学习根据评论自动打星

    本文的完整源码在git位置:https://github.com/OceanBBBBbb/douban-ml 爬取豆瓣影评 爬豆瓣的影评比较简单,豆瓣没有做限制,甚至你都不用登陆就可以看全部,我这里用 ...

  7. tcpdf中增加微软雅黑的正确方式

    找了很多增加字体的方式,不过提供的命令行下增加字体的命令是错误的,下面这个命令是验证过可以用的,不管是win还是linux活着mac都可以. tcpdf对中文的支持就不太好, 当然也可以支持, 比如里 ...

  8. 【DOM练习】百度历史搜索栏

    HTML: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <t ...

  9. MySQL 压缩文件安装遇到的问题及解决方案

    第一步:从官网下载压缩文件(链接). 第二步:解压该文件,放置到想放到的位置.我的目录是在 C:\mysql\mysql-8.0.12-winx64 下. 第三步:在C:\mysql\mysql-8. ...

  10. JZ2440学习笔记之第一个裸机程序(Keil-MDK)

    CPU:S3C2440, ARM920T, Internal 4KB RAM, Support boot from NAND flash, 128MB for each bank. JZ2440:Me ...