我正试图在未来两周内找到所有生日用户。
我尝试了以下内容:
User.find(:all, :conditions => ["DOB > ? and DOB <= ?", Date.today, 2.weeks.from_now])
这显然不起作用,因为DOB中的'年'不等于今年。
我只需要比较月份和日期。
我该怎么做呢?
答案 0 :(得分:1)
您必须在dob列上执行mysql方法
如下所示
SELECT FROM users
WHERE DAYOFYEAR(dob)in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
你可以使用像WEEK这样的函数为你起作用Ref this用于mysql函数
在红宝石中
arr=[]
(0..13).each{|i| arr << (Date.today+i.day).day }
User.find(:all, :conditions => ["DAYOFYEAR(DOB) in (?)", arr])
答案 1 :(得分:1)
根据Salil的回答,我推导出以下内容,使其适用于sqlite:
arr = []
(0..14).each { |i| arr << (Date.today + i.day).yday }
@users = User.find(:all, :conditions => ["cast(strftime('%j', DOB) AS int) in (?)", arr])
答案 2 :(得分:0)
这可能有助于更改日期格式以进行比较,因为默认情况下需要Date.today.year。
Date.strptime("{ #{DOB.month}, #{DOB.date} }", "{ %m, %d }").
Date.strptime(“{9,10}”,“{%m,%d}”)给出了
<Date: 2011-09-10 (4911629/2,0,2299161)>
如果你得到一些直接比较的代码,请发帖。
答案 3 :(得分:0)
postgresql的另一个方法:
scope :with_bday, -> (from, to) {
where("EXTRACT(DOY FROM birthday)::int BETWEEN ? AND ?", *[
from.yday,
to.yday
])
}