MySQL随机插入给定时间范围内的日期时间
在MySQL中,我们可以使用INSERT语句来将数据插入到表中。有时候,我们需要在给定的时间范围内随机插入日期时间,以便测试或模拟数据。
阅读更多:MySQL 教程
创建表格
为了演示如何随机插入日期时间,我们首先需要创建一个包含日期时间列的表格。下面是创建表格的SQL语句:
CREATE TABLE mytable (
id INT NOT NULL AUTO_INCREMENT,
mydatetime DATETIME,
PRIMARY KEY (id)
);
插入随机日期时间
在插入随机日期时间之前,我们需要确定给定时间范围。以下是一个例子,假设我们要在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语句中,我们使用了RAND()函数来生成0到1之间的随机数。我们还使用了DATE_ADD()和DATEDIFF()函数来获取给定时间范围内的随机日期。最后,我们使用LIMIT关键字来限制插入的行数。
查询数据
我们可以使用SELECT语句来查询刚刚插入的数据。以下是查询数据的SQL语句:
SELECT * FROM mytable;
输出如下:
+----+---------------------+
| 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中,我们可以使用RAND()函数和DATE_ADD()函数来在给定时间范围内插入随机的日期时间。该技巧可以用于测试和模拟数据,以及其他需要随机日期的场合。
极客教程