あなたは誕生日に年差を追加する必要があります。
SELECT *
FROM `employees`
WHERE WEEK(NOW()) = WEEK(birthdate + INTERVAL (YEAR(NOW()) - YEAR(birthday)) YEAR)
しかし、これは最初の年の最後の週の正しい動作しません。だから、今週の月曜日と日曜日の日付を計算する必要があります。
誕生日、今年:
SELECT e.*, birthdate + INTERVAL (YEAR(NOW()) - YEAR(birthdate)) YEAR
FROM employees e;
この週の月曜日:
SELECT DATE(now() - INTERVAL WEEKDAY(NOW()) DAY);
今週日曜日:
SELECT DATE(NOW() + INTERVAL 6 - WEEKDAY(NOW()) DAY);
最終クエリ:
SELECT *
FROM employees
WHERE DATE(birthdate + INTERVAL (YEAR(NOW()) - YEAR(birthdate)) YEAR)
BETWEEN
DATE(NOW() - INTERVAL WEEKDAY(NOW()) DAY)
AND
DATE(NOW() + INTERVAL 6 - WEEKDAY(NOW()) DAY);
デモ:http://rextester.com/GCC50147
02/29にはまだ問題があります。このクエリは、今年の02/28の誕生日を「言う」でしょう。それはおそらく03/01にあるべきです。その問題を解決するには、次の「トリック」を使用することができます。
SELECT e.*, birthdate - INTERVAL 1 DAY + INTERVAL (YEAR(NOW()) - YEAR(birthdate)) YEAR + INTERVAL 1 DAY
FROM employees e;
デモ:魔法のようにhttp://rextester.com/WHI96898
作品。 Tyvm! – vincent