NOW()
の場所 うるう年ではない2011
、問題は、DAYOFYEAR
を使用しているため、2月29日以降のうるう年に生まれた人には1日余分にかかることから発生します。 誕生年に対して。
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
の日です。 。