查找在一周中特定日期创建的所有记录

时间:2010-11-24 16:13:24

标签: ruby-on-rails activerecord

我需要查找在特定日期创建的所有记录。 我只提供标准型号日期时间戳。 我将如何在activerecord中执行此操作?

4 个答案:

答案 0 :(得分:3)

跟进贾斯汀的回答

where("extract(dow from created_at) = ?", Date.today.wday)

这就是我在postgres应用程序中使用的内容。这将查找在今天的同一天创建的所有记录。例如,如果今天是星期二,它会在周二找到所有记录。

答案 1 :(得分:2)

您可以在MySQL中使用DAYOFWEEK函数并将其传递给:conditions选项。假设您有一个名为Item的模型,这将返回在星期日创建的所有项目:

  

Item.all(:conditions => ['dayofweek(created_at)=?',1])

使用Postgres,您可以使用to_char执行类似操作。

请注意,使用这样的函数可能会使数据库执行全表扫描,因为至少MySQL不支持向函数添加索引。如果这是您预期经常做的事情,您可能需要考虑将周日提取到另一列。

答案 2 :(得分:1)

获取自Unix Epoch以来的秒数。 Time.to_i在Ruby中执行此操作。

使用7的模数来获得星期几(0到6)。

dayOfWeek = (epochseconds / 86400 ) % 7;

答案 3 :(得分:0)

如果您不反对使用红宝石,可以尝试一下。

array.select { |arr| ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"].include?(arr.created_at.strftime('%A'))

我最初尝试使用另一个答案中建议的dayofweek。 我遇到的问题是,好像我的sql服务器正在使用UTC时间,而我的rails服务器正在使用美国东部。晚上8点之后创建的记录将被提取,而之前发生的记录将被视为前一天。

这是另一个相关的问题: How to filter by day of week in Rails 4.2 and sqlite?