使用活动记录按月和日查找记录,忽略年份和时间

发布于 2024-11-30 15:57:33 字数 186 浏览 2 评论 0原文

我有一个模型(条目),包含五年的记录(每天一条记录)。我需要一种方法,当传递诸如 2011-12-25 00:00:00 之类的日期对象时,它将向我显示 12/25 发生的所有记录(针对 :created_at 列),无论过去的年份或时间。

罗尔 3.0.9 / 红宝石 1.9.2p290

I have a model (Entries) with five years worth of records (one record per day). I need a method that, when passed a date object such as 2011-12-25 00:00:00, will show me ALL the records that have happened on 12/25 (querying against the :created_at column), regardless of the year or time that's passed.

RoR 3.0.9 / Ruby 1.9.2p290

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

复古式 2024-12-07 15:57:33

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

Model.where("MONTH(created_at) = ? and DAY(created_at) = ?", somedate.month, somedate.day)

You can use the MONTH and DAY values of mysql. Maybe something like:

Model.where("MONTH(created_at) = ? and DAY(created_at) = ?", somedate.month, somedate.day)
虚拟世界 2024-12-07 15:57:33

一个适用于大多数 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'))

A general solution that should work with most SQL databases (include MySQL and PostgreSQL):

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

SQLite doesn't understand extract though so you'd have to use:

Entry.where("strftime('%m/%d', created_at) = ?", d.strftime('%m/%d'))
帥小哥 2024-12-07 15:57:33

假设您使用的是mysql:

User.where(["DAY(created_at) = ? AND MONTH(created_at) = ?", date.day, date.month])

Assuming that you are using mysql:

User.where(["DAY(created_at) = ? AND MONTH(created_at) = ?", date.day, date.month])
黄昏下泛黄的笔记 2024-12-07 15:57:33

假设 RDBMS 是 MySQL,并且您有带有组合框的表单来选择月份和/或日期_of_months,也许您可​​以创建一个命名范围,例如:

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)

Assume RDBMS is MySQL and you have form with combobox to select month and/or date_of_months, may be you could make a named_scope, for example :

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

Test from IRB :

Model.by_date_or_month(31,8)
Model.by_date_or_month(nil,8)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文