Dimana NOW()
adalah tahun non-kabisat 2011
, masalah muncul dari siapa pun yang lahir pada tahun kabisat setelah 29 Februari akan memiliki satu hari ekstra karena Anda menggunakan DAYOFYEAR
terhadap tahun lahir.
DAYOFYEAR('2004-04-01') // DAYOFYEAR(e.birthdate) Returns 92
DAYOFYEAR('2011-04-01') // DAYOFYEAR(NOW()) Returns 91
Di mana Anda melakukan DAYOFYEAR
, Anda memerlukan tanggal lahir dari tahun ini, bukan tahun lahir.
Jadi, alih-alih:
DAYOFYEAR(e.birthdate)
Anda dapat mengubahnya menjadi tahun ini seperti ini:
DAYOFYEAR(DATE_ADD(e.birthdate, INTERVAL (YEAR(NOW()) - YEAR(e.birthdate)) YEAR))
Yang mengubah tanggal lahir:
'2004-04-01'
Kepada:
'2011-04-01'
Jadi, inilah kueri yang dimodifikasi:
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))
Orang yang lahir pada tanggal 29 Februari akan jatuh pada tanggal 1 Maret pada tahun non-kabisat, yaitu masih hari 60
.