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

Mysql 检索具有持续时间条件的对象,mysql,ruby-on-rails,Mysql,Ruby On Rails,我有一个模型“Competition”,它的属性是start_at和end_at,都是datetime类型。我只想检索持续时间短于给定数量的比赛,例如3天。我希望很容易做到这一点: Competition.where('end_at - start_at < ?', X) Competition.where('end_at-start_at

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

Competition.where('end_at - start_at < ?', X)
Competition.where('end_at-start_at<?',X)
问题是:X使用什么

在我的数据库中,我有一个比赛对象的持续时间略短于一天(开始时间=2011-04-27 00:00:00,结束时间=2011-04-27 23:59:59),还有一个比赛对象的持续时间略短于3天(开始时间=2013-02-05 00:00:00,结束时间=2013-02-07 23:59:59),所有其他的都要长得多

为了检索两者中较短的一个,我希望使用X=60*60*24(24小时内的秒数)。不起作用。所以我试着乘以一个递增的因子,发现X乘以2.7并不能得到它,但2.8会!好的,我需要用这个奇怪的因子2.8。。。
但这对于检索少于3天的对象不起作用。这里我需要乘以8.7。有人知道这里发生了什么吗?

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

Competition.where('julianday(end_at) - julianday(start_at) < ?', 3)
Competition.where('julianday(end\u at)-julianday(start\u at)<?',3)
试试这个:

Competition.where('DATEDIFF(end_at, start_at) < ?', x)
Competition.where('DATEDIFF(end\u at,start\u 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
Competition.where('TIMESTAMPDIFF(秒,开始,结束)<?',x*86400)#其中86400是一天中的秒数,x是天数

我使用MySQL。我不知道/认为它有朱丽安·艾比,但你让我走上了正确的道路!在表达式中,用日期替换julianday。万分感谢!