检索具有持续时间条件的对象

时间:2013-01-31 18:55:47

标签: mysql ruby-on-rails

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

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

问题:我对X使用了什​​么?

在我的数据库中,我有一个持续时间略短于一天的竞赛对象(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。有人知道这里发生了什么吗?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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