如何解决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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。