2017-03-21 17 views
2

今週の誕生日を持つすべての人を探したいと思います。mysql - 今週から誕生日を取得する

たとえば、私たちは火曜日です。だから、昨日(月曜日)から日曜日までのすべての誕生日が欲しいです。

私は次のクエリ試してみました:

SELECT * FROM `employees` WHERE WEEK(birthdate) = WEEK(NOW()) 

をしかし、これは来週ではなく、現在の週で誕生日が1975-03-29である私も、GEレコード、として、私に正しいデータを与えていません。

答えて

3

あなたは誕生日に年差を追加する必要があります。

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

+0

作品。 Tyvm! – vincent

関連する問題