MySQL随机插入给定时间范围内的日期时间

MySQL随机插入给定时间范围内的日期时间

在MySQL中,我们可以使用INSERT语句来将数据插入到表中。有时候,我们需要在给定的时间范围内随机插入日期时间,以便测试或模拟数据。

阅读更多:MySQL 教程

创建表格

为了演示如何随机插入日期时间,我们首先需要创建一个包含日期时间列的表格。下面是创建表格的SQL语句:

CREATE TABLE mytable (
  id INT NOT NULL AUTO_INCREMENT,
  mydatetime DATETIME,
  PRIMARY KEY (id)
);
SQL

插入随机日期时间

在插入随机日期时间之前,我们需要确定给定时间范围。以下是一个例子,假设我们要在2020年1月1日至2020年12月31日之间插入随机的日期时间数据。

INSERT INTO mytable (mydatetime)
SELECT
  DATE_ADD('2020-01-01 00:00:00', INTERVAL FLOOR(RAND() * DATEDIFF('2020-12-31 23:59:59', '2020-01-01 00:00:00')) DAY) +
  INTERVAL FLOOR(RAND() * 24) HOUR +
  INTERVAL FLOOR(RAND() * 60) MINUTE +
  INTERVAL FLOOR(RAND() * 60) SECOND AS myrandomdatetime
FROM
  (SELECT n FROM (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a,
  (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b,
  (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) c,
  (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) d,
  (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) e,
  (SELECT @num := -1) num
  ) numbers_rand
WHERE
  DATE_ADD('2020-01-01 00:00:00', INTERVAL FLOOR(RAND() * DATEDIFF('2020-12-31 23:59:59', '2020-01-01 00:00:00')) DAY) +
  INTERVAL FLOOR(RAND() * 24) HOUR +
  INTERVAL FLOOR(RAND() * 60) MINUTE +
  INTERVAL FLOOR(RAND() * 60) SECOND NOT IN (SELECT mydatetime FROM mytable)
LIMIT 1000;
SQL

上面的SQL语句中,我们使用了RAND()函数来生成0到1之间的随机数。我们还使用了DATE_ADD()和DATEDIFF()函数来获取给定时间范围内的随机日期。最后,我们使用LIMIT关键字来限制插入的行数。

查询数据

我们可以使用SELECT语句来查询刚刚插入的数据。以下是查询数据的SQL语句:

SELECT * FROM mytable;
SQL

输出如下:

+----+---------------------+
| id | mydatetime          |
+----+---------------------+
|  1 | 2020-10-09 03:19:53 |
|  2 | 2020-12-23 16:50:44 |
|  3 | 2020-01-28 05:14:24 |
|  4 | 2020-09-07 13:19:23 |
|  5 | 2020-04-21 01:30:32 |
|  6 | 2020-09-06 20:39:27 |
|  7 | 2020-04-07 18:52:30 |
|  8 | 2020-10-16 21:50:49 |
|  9 | 2020-07-15 07:22:26 |
| 10 | 2020-06-19 05:25:50 |
+----+---------------------+
10 rows in set (0.00 sec)
Mysql

总结

在MySQL中,我们可以使用RAND()函数和DATE_ADD()函数来在给定时间范围内插入随机的日期时间。该技巧可以用于测试和模拟数据,以及其他需要随机日期的场合。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册