Rails日期没有年份

时间:2011-11-10 20:53:08

标签: ruby-on-rails-3 date

如何按日期查找记录,但没有年份?

这就是我所拥有的:

@date = Date.today
@article = Article.find_by_date(@date)

但我真正想做的就是搜索一篇只有月和日的文章。这一年并不重要。

4 个答案:

答案 0 :(得分:2)

使用SQLite测试:

Model.find(:all, :conditions => ["STRFTIME('%m-%d', field_name) = '?-?'", 12, 25])

生成的查询说明了如何查找field_name为圣诞节的所有内容:

Model Load (16.1ms)  SELECT "models".* FROM "models" WHERE (STRFTIME('%m-%d', field_name) = '12-25')

我也成功使用了较短的“field_name LIKE'%-MM-DD'”,但这是MySQL;根据其手册,它确实使用字符串来读取和写入日期。 YMMV。

答案 1 :(得分:1)

我怀疑这取决于您使用的是哪个数据库。不同的实现具有不同的EXTRACT或DATE_PART函数的名称/语法。在PostgreSQL上,这个有效:

Model.where('EXTRACT(month FROM field_name) = ? AND EXTRACT(day FROM field_name) = ?', 12, 25)

答案 2 :(得分:1)

你可以这样做:

Model.all.where(["DAY(`date`) = ? AND MONTH(`date`) = ?", Date.current., 12])

简单!

答案 3 :(得分:0)

数据库不可知的方法是为模型添加date_month和date_day的属性(并使用before_save回调设置它们)。类似的东西:

before_save :set_date_day_and_month

def set_date_day_and_month
  self.date_month = date.month
  self.date_day = date.day
end
#untested

然后,您可以执行不涉及特定于数据库的函数的直接查询。像:

Article.where('date_month = ? AND date_day = ?', 12, 25)
#for articles on Christmas

或者:

Article.where('date_month = ? AND date_day = ?', Date.today.month, Date.today.day)
#for articles on this date any year