Rails Sql查询MONTH和YEAR

| 我正在尝试在索引视图中显示当前月份和年份的销售交易。 这是我放入销售控制器中的内容:
def index
 @sales = show_sales_for_current_month(@sales)
在SalesHelper中使用此方法
def show_sales_for_current_month(sales)
  sales = Sale.find(:all,
                  :conditions => [\"MONTH(date) = ? AND YEAR(date) =?\",
                                  Date.today.month, Date.today.year])
end
其中date是日期数据类型。 但我收到以下控制器错误:
SQLite3::SQLException: no such function: MONTH: SELECT \"sales\".* FROM \"sales\" WHERE (MONTH(date) = 4 AND YEAR(date) =2011)
我环顾了帖子,看来这是正确的功能,所以我在做什么错呢?谢谢!     
已邀请:
在MySQL中,这可行,但是您使用的是SQLite3,因此您需要修改查询以使用MONTH和YEAR的SQLite3版本,这意味着使用strftime函数:
sales = Sale.find(:all,
  :conditions => [\"strftime(\'%m\', date) = \'?\' AND strftime(\'%Y\', date) = \'?\'\",
    \'%02d\' % Date.today.month, Date.today.year])
    
嘿,我有一个名为by_star的gem,可以帮助您进行此类查询。在您的情况下,您只需要在控制器中执行以下操作:
@sales = Sale.by_month
by_star负责计算月份和年份以及凌乱的SQL。     
SQLite3中不存在MONTH和YEAR函数。您可以采用这种方法(摘自我当前的项目): 模型entry.rb:
  def self.all_entries_year(year, user_id)
    where(\'entries.user_id = :id\', :id => user_id ).
    where(\':first_day <= entries.date AND entries.date <= :last_day\', { 
        :first_day => Date.new(year, 1, 1),
        :last_day => Date.new(year, 12, 31)
    }).
    order(\'date desc\')
  end
编辑: 将其放在您的模型中:sales.rb(我想它具有字段日期)
def self.show_sales_for_current_month(year, month)

  mydate = Date.new(year, month, 1)

  where(\':first_day <= sales.date AND sales.date <= :last_day\', { 
        :first_day => mydate,
        :last_day => mydate.at_end_of_month
  }).
  order(\'date\')
end
    

要回复问题请先登录注册