0

我希望从我的 MySQL 数据库中提取记录,其中出生日期 (dob) 的 DAY 介于现在和 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 信息感兴趣。

4

2 回答 2

1

由于您的日期已经以日期格式存储,只需将 15 天添加到当前日期,以便您找到介于该范围之间的结果:

SELECT * FROM table WHERE date_col BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY)
于 2012-06-22T18:10:29.797 回答
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 天之间的比较很简单。

于 2012-06-22T18:10:53.610 回答