我希望从MySQL数据库中提取记录,其中出生日期(dob)的日期介于现在和XX天之间。例如,显示从现在到15天之间的所有生日。我使用下面的公式,它可以工作,直到今天的日期接近月底。所以,如果今天是6月1日,我想从现在到15天之间抽出所有的生日...它运作正常。但如果今天是6月25日,它会说没有记录,因为这15天的结束是在另一个月。
SELECT contacts._id FROM `contacts` LEFT JOIN `groups` ON groups._id = "2"
WHERE (DAY(`dob`) BETWEEN DAY(CURDATE())
AND DAY(ADDDATE(CURDATE(), INTERVAL 15 DAY))
AND MONTH(`dob`) BETWEEN MONTH(CURDATE())
AND MONTH(ADDDATE(CURDATE(), INTERVAL15 DAY))
我也尝试使用类似下面的代码,但它不能用于DOB数据,因为在今年之前的年份将永远不会找到。所以,必须忽略这一年。
SELECT contacts._id FROM `contacts` LEFT JOIN `groups` ON groups._id = "2"
WHERE dob BETWEEN CURDATE() AND CURDATE() + 15
日期存储在数据库中,如2012-08-27,1982-06-18,1963-07-26等。我只对MONTH-DAY信息感兴趣。
答案 0 :(得分:1)
由于您的日期已经存储在日期格式中,因此只需将15天添加到当前日期,这样您就可以找到介于该范围之间的结果:
SELECT * FROM table WHERE date_col BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY)
答案 1 :(得分:1)
使用DAYOFYEAR()
和MAKEDATE()
:
SELECT
a._id
FROM
contacts a
LEFT JOIN
groups b ON b._id = 2
WHERE
MAKEDATE(YEAR(NOW() + INTERVAL 15 DAY), DAYOFYEAR(a.dob)) BETWEEN NOW() AND NOW() + INTERVAL 15 DAY
<强>解释强>
MAKEDATE(YEAR(NOW() + INTERVAL 15 DAY), DAYOFYEAR(a.dob))
根据一年中的哪一天(1到365或366)获得出生日期,但是在当年(或者如果15天范围介于两年之间的下一年)的情况下
说出生日期为1986-07-04
。它会创建2012-07-04
,从现在到15天之间的比较很简单。