我想用Sequel恢复当月的条目列表, 我试着:
Entry.where(:date >= Date.month).sum(:duration)
或
Entry.where(:date.like('%/06/2013')).sum(:duration)
和其他......
但他们似乎都没有工作
提前致谢
答案 0 :(得分:1)
如果您希望所有条目都是当前月份和当前年份,那么使用范围可能最容易:
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)
答案 1 :(得分: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输出,但我不知道你正在使用的数据库类型,而且,我很懒。
通常,您可以通过截断“now”来删除日期,然后查找截断日期与之匹配的所有时间戳,从而在DB内部玩弄技巧。这比DBM更具体,而不是使用Sequel,后者已经知道在将它们转换为“之间”类型语句时如何处理范围。