2016-02-04 58 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 

如何你确切的方法最终取决于您希望如何处理这一个月可能落入前一年或下一年。

在某些情况下,让用户选择带日期输入的月份可能会更有意义,以便您可以区分。

相关问题