我有一张有周年纪念日的 table 。我想要一个查询,该查询将返回 future 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)

我想以x <= 10的形式保留查询,因为我将在查询的其他部分使用该数字10,并且如果将其设置为变量,则可以在任何地方通过更改变量来更改它,而不是必须重新编写查询。

最佳答案

正如其他人所述,您需要在比较中忽略年份。 DAYOFYEAR()函数是实现此目的的一种方法。

这是我脑海中的一个快速解决方案。它会在接下来的10天内返回所有生日,即使是12月下旬且该生日是明年。

它不能正确处理leap年,因此,如果今年是a年,并且该人不是in年出生,反之亦然,那么它将在三月初的生日前1天关闭。 years年还会导致1月初的生日有时在12月下旬出现一天假。如果有人想添加leap年校正,请放心:)

SELECT birthdate
FROM Anniversaries
WHERE dayofyear(birthdate) - dayofyear(curdate()) between 0 and 10
or dayofyear(birthdate) + 365 - dayofyear(curdate()) between 0 and 10;

关于mysql - 在MySql中查找周年纪念日是否即将到来,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2874772/

10-09 06:44