4

我有一个模型(条目),有五年的记录(每天一条记录)。我需要一种方法,当2011-12-25 00:00:00传递一个日期对象(例如:created_at

RoR 3.0.9 / 红宝石 1.9.2p290

4

4 回答 4

12

您可以使用 mysql 的 MONTH 和 DAY 值。也许是这样的:

Model.where("MONTH(created_at) = ? and DAY(created_at) = ?", somedate.month, somedate.day)
于 2011-08-18T03:31:55.350 回答
12

适用于大多数 SQL 数据库(包括 MySQL 和 PostgreSQL)的通用解决方案:

Entry.where('extract(month from created_at) = ? AND extract(day from created_at) = ?', d.month, d.day)

SQLite 不明白extract,所以你必须使用:

Entry.where("strftime('%m/%d', created_at) = ?", d.strftime('%m/%d'))
于 2011-08-18T03:39:00.667 回答
2

假设您使用的是 mysql:

User.where(["DAY(created_at) = ? AND MONTH(created_at) = ?", date.day, date.month])
于 2011-08-18T03:32:41.437 回答
2

假设 RDBMS 是 MySQL,并且您有带有组合框的表单来选择月份和/或 date_of_months,可能您可以创建一个 named_scope,例如:

scope :by_date_or_month, lambda { |date, month| {:conditions => ["DAYOFMONTH(created_at) = ? or MONTH(created_at) = ?", date, month]}}

来自 IRB 的测试:

Model.by_date_or_month(31,8)
Model.by_date_or_month(nil,8)
于 2011-08-18T04:06:33.783 回答