0

我想用 Sequel 恢复当月的条目列表。

我试过了:

Entry.where(:date >= Date.month).sum(:duration)

或者

Entry.where(:date.like('%/06/2013')).sum(:duration)

和其他方式,但它们似乎都不起作用。

4

2 回答 2

2

如果您想要当前月份和当前年份的所有条目,使用范围可能是最简单的:

d = Date.today
Entry.where(:date=> Date.new(d.year, d.month)...(Date.new(d.year, d.month) >> 1)).sum(:duration)

如果您想要任何一年中的当前月份,Sequel 已经内置了对此的支持:

Entry.where(Sequel.extract(:month, :date) => Date.today.month).sum(:duration)
于 2013-07-05T15:56:15.093 回答
0

您需要考虑数据库的思维方式,以及 Sequel 如何将 Ruby 范围转换为 SQL:

require 'date'

today = Date.today                          # => #<Date: 2013-07-03 ((2456477j,0s,0n),+0s,2299161j)>
first_of_month = (today - today.day) + 1
first_of_month                              # => #<Date: 2013-07-01 ((2456475j,0s,0n),+0s,2299161j)>
next_month = today + 31                     # => #<Date: 2013-08-03 ((2456508j,0s,0n),+0s,2299161j)>
last_of_month = next_month - next_month.day # => #<Date: 2013-07-31 ((2456505j,0s,0n),+0s,2299161j)>
last_of_month                               # => #<Date: 2013-07-31 ((2456505j,0s,0n),+0s,2299161j)>

Entry.where(:date => [first_of_month .. last_of_month]).sum(:duration)

我会向您展示 SQL 输出,但我不知道您正在使用的数据库类型,而且,我很懒惰。

通常,您可以通过截断“现在”来删除日期,然后找到与截断日期匹配的所有时间戳,从而在数据库中发挥技巧。这比使用 Sequel 更具体到 DBM,后者在将范围转换为“between”类型语句时已经知道如何处理范围。

于 2013-07-04T00:13:55.920 回答