2016-02-04 60 views
1

使用Rails 4.2,Ruby 2.1.7。 Postgresql 9.4按月份編號查找特定月份的所有記錄(例如1 = 1月)

我想找一個特定月份的所有記錄,當我只有一個整數作爲參數。

例如1 =一月,2 =二月

現在我有(START_TIME是我datetime場)

def self.by_month(month) 
    where('extract(month from start_time) = ?', month) 
end 

產生的SQL查詢:

SELECT "jobs".* FROM "jobs" WHERE (extract(month from start_time) = 1) 
+0

格式在這裏很重要。嘗試以'yyyy/mm/dd'格式創建。 – Pavan

+0

@Pavan月的格式?如何創建'Date.new'? – daniel

+1

顯示一些示例數據和正在運行的SQL查詢。另外什麼是'月份'變量的數據類型。這應該是一個整數,因爲'extract()'返回一個整數 –

回答

1

一個更好的解決辦法可能是使用日期範圍。 ActiveRecord將其轉換爲WHERE x BETWEEN y AND z,因爲如果您有多年的記錄,提取月份可能不明確。

事情是這樣的:

def self.by_month(int) 
    int = int - 1 # convert month from 1 to 0 based 
    now = DateTime.now 
    if int < (now.month + 1) # now.month is 1 based 
    min = now.beginning_of_year + int.months 
    else 
    min = now.last_year.beginning_of_year + int.months 
    end 

    where(start_time: [min..(min.end_of_month)]) 
end 

如何你確切的方法最終取決於您希望如何處理這一個月可能落入前一年或下一年。

在某些情況下,讓用戶選擇帶日期輸入的月份可能會更有意義,以便您可以區分。