【问题标题】:SQLite - select random datetime in rangeSQLite - 在范围内选择随机日期时间
【发布时间】:2012-12-21 14:17:02
【问题描述】:

我不熟悉 SQLite。有人可以帮我生成随机日期时间值吗?

我尝试从这个开始(它适用于 MS-SQL):

select dateadd(
               millisecond, 
               cast(86400000 * RAND() as int), 
               convert(time, '00:00')
               );

但是 sqlite 返回错误:invalid column millisecond.

我需要一些东西,允许生成具有指定最小和最大日期的随机日期时间,但现在我认为只需要知道如何将数字转换为日期

我使用的是 SQLite 版本 3.7.15.1。

【问题讨论】:

  • 您的语法是 SQL Server,而不是 SQLite。你用的是什么数据库?
  • 对这个随机日期的范围是否有任何限制? 1000年后也可以吗?
  • @PinnyM 在这种情况下我需要从 10 小时到几天不等。

标签: sql random sqlite


【解决方案1】:

random() function 生成随机 64 位整数。
带有'%s' 参数的strftime() function 将日期/时间字符串转换为自1970 年以来的秒数。
带有'unixepoch' 修饰符的datetime() function 将秒数转换为日期/时间字符串。

要将随机整数转换为所需的秒范围,请使用取模运算符 (%) 并将最小/最大日期之间的秒差作为范围,并将其添加到开始日期。 例如,以下将生成 2000 年 1 月的随机时间戳:

SELECT datetime(strftime('%s', '2000-01-01 00:00:00') +
                abs(random() % (strftime('%s', '2000-01-31 23:59:59') -
                                strftime('%s', '2000-01-01 00:00:00'))
                   ),
                'unixepoch');

【讨论】:

    猜你喜欢
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 2011-07-01
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多