我的rails应用数据库中有一个像“2011-06-30”这样的日期字段。日期可能在几个月的范围内。我想知道如何使用AR查询我的数据库中的不同月份。
我想最终得到的结果是:
[January, February, April, June]
答案 0 :(得分:4)
不确定是否有纯粹的AR方式。
使用Postgre,你可以这样做:
Model.select("distinct date_part('month',your_date_field) as my_months").all
这将返回类似[1,3,10]
的数组。
然后,您可以使用Date::MONTHNAMES[your month]
显示数组的值,以获取全名而不是数字。
更新 - 基于Caley的评论,可能更多数据库不可知
Yourmodel.select('distinct date_field').all.collect{|x| x[:date_field].month}.uniq
将给出
[1, 5, 6, 7, 8, 11, 12, 2, 3, 4, 9, 10]
如果您的数据超过1年,则意味着您将迭代超过365个元素。 (糟糕的366年)。所以也许性能打击是可以接受的。 我试过运行这个
(Date.new(2011,1,1)..Date.new(2011,12,31)).collect{|x| x.month}.uniq
结果立即显现
答案 1 :(得分:2)
谢谢@Pierre,但我就是这样做的:
MyModel.all.map { |d| d.my_date_field.strftime('%b %y') }.uniq
# ["Jun 11", "Jul 11", "Aug 11"]