在现在和XX天之间显示MySQL DOB记录

时间:2012-06-22 18:02:14

标签: mysql

我希望从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信息感兴趣。

2 个答案:

答案 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天之间的比较很简单。