mysql获取时间范围内随机日期

  Seves

1. 需求

  • 将DATE_TEST的1140条数据的CREATE_TIME设置为2017年9月14日工作时间(早9点到晚6点)范围内随机时间
  • 在此基础上将UPDATE_TIME设置为CREATE_TIME之后的40~300秒之间的随机时间
  • 计算出UPDATE_TIME和CREATE_TIME之差,单位秒

2. 将DATE_TEST的1140条数据的CREATE_TIME设置为2017年9月14日工作时间(早9点到晚6点)范围内随机时间

SELECT CONCAT('2017-09-14 ', LPAD(FLOOR(9 + (RAND() * 9)),2,0),':',LPAD(FLOOR(0 + (RAND() * 59)),2,0),':',LPAD(FLOOR(0 + (RAND() * 59)),2,0));
UPDATE DATE_TEST SET CREATE_TIME = CONCAT('2017-09-14 ', LPAD(FLOOR(9 + (RAND() * 9)),2,0),':',LPAD(FLOOR(0 + (RAND() * 59)),2,0),':',LPAD(FLOOR(0 + (RAND() * 59)),2,0));
  • FLOOR 舍去小数部分,只返回正数部分。 ROUND小数部分四舍五入,然后返回正数部分。
  • LPAD:返回字符串str,左填充用字符串padstr填补到len字符长度。 如果str为大于len长,返回值被缩短至len个字符(即,不能超过 len 长)。 RPAD相反,是右填充字符串。

3. 将UPDATE_TIME设置为CREATE_TIME之后的40~300秒之间的随机时间

SELECT DATE_ADD('2017-09-14 12:12:33',INTERVAL LPAD(FLOOR(40 + (RAND() * 260)),3,0) second);
UPDATE DATE_TEST SET UPDATE_TIME = DATE_ADD(CREATE_TIME,INTERVAL LPAD(FLOOR(40 + (RAND() * 260)),3,0) second);

4. 计算出UPDATE_TIME和CREATE_TIME之差,单位秒

SELECT TIMESTAMPDIFF(second, '2010-04-23 17:53:38', '2010-04-23 17:53:39');
UPDATE DATE_TEST SET TIMES = TIMESTAMPDIFF(second, CREATE_TIME, UPDATE_TIME);

5. 最终整理好的数据

33