जहां NOW()
एक गैर-लीप वर्ष है 2011
, समस्या यह है कि 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))
29 फरवरी को जन्म लेने वाले लोग 1 मार्च को गैर-लीप वर्ष पर गिरेंगे, जो अभी भी दिन है 60
।