SQL -- 产生随机数

mysql产生随机数的方法RAND()
RAND() 产生0~1之间的随机数,例如

输入图片说明

在mysql中,当处理数值时,例如:存在一个float型数值3.86,如果我们只想取整数部分,则可以使用mysql的floor函数。例如

输入图片说明

现在工程需求产生一个17位纯数字char型数据,分析如下
1>17位的纯数字范围10000000000000000~99999999999999999
2>产生一个0~1之间的随机数,如:0.12345678901234567
3>我们取上述随机数的临界值,即0或者1,则17位随机数的范围0~99999999999999999
4>我们要保证位数为17位,因此低临界值的最小数据应该是10000000000000000
5>很容易想到SQL应该这么写,得到的结果如下

select 10000000000000000 + RAND()*(99999999999999999-10000000000000000)

输入图片说明
6>取整数部分,SQL如下

SELECT FLOOR(10000000000000000+RAND()*(99999999999999999-10000000000000000))

结果图如下

输入图片说明
7>很明显,在mysql中,17位的纯数字肯定不能为int,如上工程,我设置为char型,第6>中得出的数据如果直接插入到数据库表中,则会出现 4.045002932702194e16 这种数据,因此我们需要将其转换成char型,采用字符串拼接函数,SQL如下

SELECT CONCAT(FLOOR(10000000000000000+RAND()*(99999999999999999-10000000000000000)),'')

输入图片说明
8>总结:需要产生X位的随机数的算法

SELECT FLOOR(X位数据的最小值+RAND()*(X位数据的最大值-X位数据的最小值))

注意:如果X的位数大于11,则需要按照如上将数据由int转成char型。

转载于:https://my.oschina.net/u/2312022/blog/717797

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值