在数据库中随机产生时间是一种常见需求,例如用于创建测试数据或模拟真实世界的场景。在 SQL 中,可以使用多种 来实现这一目标。
RAND 函数
RAND 函数生成一个介于 0 和 1 之间的随机数。可以使用它来生成随机时间戳,例如:
sql
SELECT RAND() * (UNIX_TIMESTAMP('2023-01-01') - UNIX_TIMESTAMP('2022-01-01')) + UNIX_TIMESTAMP('2022-01-01');
此查询将生成一个介于 2022-01-01 和 2023-01-01 之间的随机时间戳。
RAND() 和 NOW() 函数
RAND() 函数与 NOW() 函数结合使用,还可用于生成随机时间戳:
sql
SELECT NOW() + (RAND() * 3600);
此查询将生成一个当前时间加上一个随机时差(最大 1 小时)的时间戳。
随机化现有的时间戳
如果已有一个时间戳,可以使用以下 对其进行随机化:
sql
SELECT TIMESTAMPADD(SECOND, ROUND(-RAND() * 3600), '2023-01-01 00:00:00');
此查询将对 2023-01-01 00:00:00 时间戳添加一个随机时差(最大 1 小时)。
其他注意事项
需要注意的是,这些 都将生成基于 UNIX 时间戳的随机时间。如果需要生成基于自然语言日期的时间,则需要使用其他函数,例如 STRFTIME 和 DATE_FORMAT。