如何按日期查找记录,但没有年份?
这就是我所拥有的:
@date = Date.today
@article = Article.find_by_date(@date)
但我真正想做的就是搜索一篇只有月和日的文章。这一年并不重要。
答案 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