我在我的rails應用程序的數據庫中有一個類似「2011-06-30」的日期字段。日期可能在幾個月的範圍內。我想知道如何使用AR來查詢我的數據庫中不同的月份。在ActiveRecord中查詢不同的月份
我想結束了,結果是一樣的東西:
[January, February, April, June]
我在我的rails應用程序的數據庫中有一個類似「2011-06-30」的日期字段。日期可能在幾個月的範圍內。我想知道如何使用AR來查詢我的數據庫中不同的月份。在ActiveRecord中查詢不同的月份
我想結束了,結果是一樣的東西:
[January, February, April, June]
謝謝@Pierre但是這是我做到了
MyModel.all.map { |d| d.my_date_field.strftime('%b %y') }.uniq
這讓我有點像
["Jun 11", "Jul 11", "Aug 11"]
不知道有一個純AR辦法做到這一點。
與Postgre,你可以做這樣的:
Model.select("distinct date_part('month',your_date_field) as my_months").all
這將返回數組一樣[1,3,10]
。
然後,您可以使用Date::MONTHNAMES[your month]
來顯示數組的值,使其具有全名而不是數字。
更新 - 基於凱萊的評論,可能更DB無關
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
而結果來立即
'''Model.find_by_sql()'''也是一個選項,以及查找所有月份並調用'''.uniq''',儘管這不會像表演一樣。 –
什麼數據庫? SQLite的? MySQL的? postge? – fl00r
開發是sqlite,但生產將postgres。我希望有一個非數據庫特定的解決方案。 – Brand
當你說你有像「2011-06-30」這樣的日期時,那些在數據庫中存儲爲* strings *的數據,還是作爲某種日期/時間字段存儲? – Zabba