服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|

服务器之家 - 数据库 - Mysql - MySQL的指定范围随机数函数rand()的使用技巧

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

2020-06-22 16:17服务器之家 Mysql

这篇文章主要介绍了MySQL的指定范围随机数函数rand()的使用技巧,需要的朋友可以参考下

公式如下:

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

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

延伸 · 阅读

精彩推荐
  • MysqlMySql数据库之alter表的SQL语句集合

    MySql数据库之alter表的SQL语句集合

    mysql之alter表的SQL语句集合,包括增加、修改、删除字段,重命名表,添加、删除主键等。本文给大家介绍MySql数据库之alter表的SQL语句集合,感兴趣的朋友...

    MYSQL教程网2672020-06-06
  • MysqlMySQL数据库如何开启远程连接(多备份)

    MySQL数据库如何开启远程连接(多备份)

    多备份服务器在备份你的数据库时,必须能够远程连接上你的数据库。但是一般来说mysql安装时都是关闭远程连接的,因此,需要你开通mysql数据库的远程访...

    MYSQL教程网1962020-04-27
  • MysqlMySQL5.6安装图解(windows7/8_64位)

    MySQL5.6安装图解(windows7/8_64位)

    这篇文章主要内容是关于MySQL5.6安装图解,希望通过这篇文章顺利解决大家安装MySQL5.6的问题,再也不用为了安装烦恼 ...

    MYSQL教程网4892020-05-19
  • MysqlMysql学习心得之插入、更新、删除记录

    Mysql学习心得之插入、更新、删除记录

    在程序开发过程中,离不开数据库,数据库离不开增删改查操作,下面小编把我对mysql学习之插入、更新、删除记录心得总结分享给大家,需要的朋友可以...

    红豆绿豆都有抹茶3922020-05-17
  • MysqlMysql中实现提取字符串中的数字的自定义函数分享

    Mysql中实现提取字符串中的数字的自定义函数分享

    这篇文章主要介绍了Mysql中实现提取字符串中的数字的自定义函数分享,通常这种问题是在编程语言中实现,本文使用自定义SQL函数实现,需要的朋友可以参考...

    MYSQL教程网3902020-04-21
  • Mysql对比MySQL中int、char以及varchar的性能

    对比MySQL中int、char以及varchar的性能

    在本篇文章中我们给大家分享了关于MySQL中int、char以及varchar的性能对比的相关内容,有兴趣的朋友们学习下。...

    laozhang5612019-06-20
  • MysqlMySQL存储数据乱码的问题解析

    MySQL存储数据乱码的问题解析

    这篇文章主要介绍了MySQL存储数据乱码的问题解析,作者从实际使用中的多个方面定位其原因然后解决,需要的朋友可以参考下 ...

    MYSQL教程网4292020-05-05
  • Mysql解析MySQL中INSERT INTO SELECT的使用

    解析MySQL中INSERT INTO SELECT的使用

    本篇文章是对MySQL中INSERT INTO SELECT的使用进行了详细的分析介绍,需要的朋友参考下 ...

    MYSQL教程网4002020-01-05