在下面的查询中不考虑闰年。
SELECT e.id,
e.title,
e.birthdate
FROM employers e
WHERE DAYOFYEAR(curdate()) <= DAYOFYEAR(e.birthdate)
AND DAYOFYEAR(curdate()) +14 >= DAYOFYEAR(e.birthdate)
所以在这个查询中,闰年出生的人的生日在非闰年有不同的dayofyear。
我如何调整查询以确保它在闰年也能正常工作?
我的mysql版本是:5.0.67
最佳答案
如果 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 日,也就是 60
日。
关于Mysql闰年Dayofyear,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9703367/