【发布时间】:2014-11-06 12:45:25
【问题描述】:
我正在尝试找出如何在 2 个时间范围之间返回随机时间。 例如,获取 15:00:00 到 22:00:00 之间的随机时间
到目前为止,我有 - 但不知道如何限制它
select sec_to_time(floor(15 + (rand() * 86401)))
任何帮助将不胜感激!
【问题讨论】:
我正在尝试找出如何在 2 个时间范围之间返回随机时间。 例如,获取 15:00:00 到 22:00:00 之间的随机时间
到目前为止,我有 - 但不知道如何限制它
select sec_to_time(floor(15 + (rand() * 86401)))
任何帮助将不胜感激!
【问题讨论】:
SELECT SEC_TO_TIME(
FLOOR(
TIME_TO_SEC('15:00:00') + RAND() * (
TIME_TO_SEC(TIMEDIFF('22:00:00', '15:00:00'))
)
)
);
以秒计算。然后添加一个在15:00:00 和22:00:00 到15:00:00 之间的秒范围内的随机数。然后将秒转换回时间值。
【讨论】:
试试这个方法
select FROM_UNIXTIME(UNIX_TIMESTAMP('<starting_date_in_date_format>') + FLOOR(0 + (RAND() * UNIX_TIMESTAMP('<ending_date_in_date_format>'))) from dual;
【讨论】:
select FROM_UNIXTIME(UNIX_TIMESTAMP('<starting_date_in_date_format>') + FLOOR(RAND() * (UNIX_TIMESTAMP('<ending_date_in_date_format>') - UNIX_TIMESTAMP('<starting_date_in_date_format>'))),因为 rand 应该乘以 unix 结束和开始时间戳之间的距离,而不是 unix 结束时间戳本身。 Unix 时间戳只是一个整数,所以我们基本上是从范围内生成随机数:range_start + floor(rand() * (range_end - range_start))。