注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天朝布衣田中码农参上

苦逼码农的点点滴滴,请多多指教!

 
 
 

日志

 
 
 
 

MySQL获取某一范围内随机数,随机日期  

2017-05-10 14:53:41|  分类: Mysql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
大家都知道,MySql有一个函数RAND()可以在0和1之间产生一个随机数,还可以使用ORDER BY RAND()来取得随机记录。
最近手头上的项目有需求,要利用Mysql获取一定范围内的随机数,这个简单,直接利用公式来计算【取i跟j之间的整数】:FLOOR(i + RAND() * (j – i ))。
例如取100-200之间的整数。

select FLOOR(100+RAND()*100)

执行结果如下:
MySQL获取某一范围内随机数,随机日期 - sinsunson - 天朝布衣田中码农参上
一切看起来非常简单,但是年青人,图样图森破,老板的需求怎会如此简单,问题就来了,不要随机数,要的是指定某段日期中的一个随机值。怎么样,是不是有点头大了,老板的工资不好挣啊。
有网友在网上弄出了一个解决方案。

select CONCAT(FLOOR(1990 + (RAND() * 25)),'-',LPAD(FLOOR(1 + (RAND() * 12)),2,0),'-',

LPAD(FLOOR(1 + (RAND() * 27)),2,0),' ',LPAD(FLOOR(0 + (RAND() * 23)),2,0),':'

,LPAD(FLOOR(0 + (RAND() * 59)),2,0),':',LPAD(FLOOR(0 + (RAND() * 59)),2,0))

执行结果如下:
MySQL获取某一范围内随机数,随机日期 - sinsunson - 天朝布衣田中码农参上
看来是达到效果了,不过兄弟有没有觉得头晕,生成的时间段是1990到2015之间,而且看这表达式似乎效率也不高,而且有破绽【随机生成的日期只能到28】,看来是需要改进下。

select FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP("1990-01-01 00:00:01")+RAND()*

(UNIX_TIMESTAMP("2015-12-31 23:59:59")-UNIX_TIMESTAMP("1990-01-01 00:00:01"))))

改写的SQL语句,然后执行的效率要高些,还有就是不会再有28号之后的日期无法生成的问题。
MySQL获取某一范围内随机数,随机日期 - sinsunson - 天朝布衣田中码农参上
好了,有了这个,然后可以向老板表功了,也许还可以有奖励。至于你们会拿这些去做些什么,那就不是笔者关心的问题了。
 
  评论这张
 
阅读(1)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017