凡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
天。
OK,開始還以爲你想要求一個錯誤的'DAYOFYEAR'功能。所以,當然,'DAYOFYEAR'在閏年是不同的。你需要解釋爲什麼這是一個問題。 – Alnitak 2012-03-14 14:01:33
你究竟想用這個查詢來完成什麼? – 2012-03-14 14:03:13
定義作品。當然DayOfYear在閏年是不同的,還有一天。 – 2012-03-14 14:04:03