在MySql中发现n天内是否会出现周年纪念日

use*_*841 7 mysql datetime

我有一张周年纪念日的桌子.我想要一个查询,它会在接下来的10天内返回一系列纪念日.例如:

birthdate
---------
1965-10-10
1982-05-25


SELECT birthdate FROM Anniversaries WHERE mystical_magical_mumbo_jumbo <= 10

+------------+
| birthdate  |
+------------+
| 1982-05-25 |
+------------+
1 row in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)

我想在表单中保留查询x <= 10,因为我将在查询的其他部分使用该数字10,如果我将其设置为变量,我可以通过更改变量在任何地方更改它,而不是重写查询.

Ike*_*ker 7

正如其他人所说,你需要忽略比较中的年份.DAYOFYEAR()函数是一种方法.

这是我头脑中的快速解决方案.它将在接下来的10天内返回所有生日,即使它是12月下旬和生日是明年.

它没有正确处理闰年,所以如果今年是闰年并且该人不是在闰年出生,反之亦然,那么3月初生日将会停止1天.闰年也将导致1月初的生日有时在12月下旬出现休息一天.如果有人想添加闰年修正,请随意:)

SELECT birthdate 
FROM Anniversaries 
WHERE dayofyear(birthdate) - dayofyear(curdate()) between 0 and 10 
or dayofyear(birthdate) + 365 - dayofyear(curdate()) between 0 and 10;
Run Code Online (Sandbox Code Playgroud)