哪里NOW()
是非闰年2011
,问题来自于 2 月 29 日之后的闰年出生的任何人都会有额外的一天,因为您使用DAYOFYEAR
的是出生年份。
DAYOFYEAR('2004-04-01') // DAYOFYEAR(e.birthdate) Returns 92
DAYOFYEAR('2011-04-01') // DAYOFYEAR(NOW()) Returns 91
在你做的地方DAYOFYEAR
,你需要当年的生日,而不是出生年份。
所以,而不是:
DAYOFYEAR(e.birthdate)
您可以像这样将其转换为今年:
DAYOFYEAR(DATE_ADD(e.birthdate, INTERVAL (YEAR(NOW()) - YEAR(e.birthdate)) YEAR))
哪个转换出生日期:
'2004-04-01'
至:
'2011-04-01'
所以,这是修改后的查询:
SELECT e.id,
e.title,
e.birthdate
FROM employers e
WHERE DAYOFYEAR(curdate()) <= DAYOFYEAR(DATE_ADD(e.birthdate, INTERVAL (YEAR(NOW()) - YEAR(e.birthday)) YEAR))
AND DAYOFYEAR(curdate()) +14 >= DAYOFYEAR(DATE_ADD(e.birthdate, INTERVAL (YEAR(NOW()) - YEAR(e.birthday)) YEAR))
2 月 29 日出生的人在非闰年的 3 月 1 日将落在 3 月 1 日,这仍然是白天60
。