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型。