0

我有一个具有 start_at 和 end_at 属性的模型“竞争”,两者都是 datetime 类型。我只想检索持续时间短于给定数量的比赛,例如 3 天。我希望很容易做到这一点:

Competition.where('end_at - start_at < ?', X)

问题:我对 X 使用什么?

在我的数据库中,我有一个持续时间略小于 1 天的竞赛对象(start_at = 2011-04-27 00:00:00,end_at = 2011-04-27 23:59:59)和一个略小于 3天(start_at = 2013-02-05 00:00:00,end_at 2013-02-07 23:59:59),所有其他的都更长。

为了检索两者中较短的一个,我预计使用 X = 60*60*24(24 小时内的秒数)。不工作。所以我尝试乘以一个增加的因子,发现将 X 乘以 2.7 不会检索到它,但 2.8 会!所以好吧,我需要使用这个奇怪的因子 2.8...但这不适用于检索短于 3 天的对象。这里我需要乘以 8.7。有人知道这里发生了什么吗?

4

2 回答 2

0

可用的功能取决于您使用的数据库。例如,使用 SQLite,您可以使用:

Competition.where('julianday(end_at) - julianday(start_at) < ?', 3)
于 2013-01-31T19:16:20.973 回答
0

尝试这个:

Competition.where('DATEDIFF(end_at, start_at) < ?', x)

为了更准确

Competition.where('TIMESTAMPDIFF(SECOND, start_at, end_at) < ?', x*86400)  #where 86400 is the seconds in a day and x is no. of days
于 2013-01-31T19:39:16.230 回答