2017-02-23 6 views
3

私は誕生日のあるテーブルをYYYY-MM-DDでフォーマットしています。私の目的は、誕生日が7日以内なら結果を返すことです。曜日と月のみを使用して次の7日間を選択してください

年を読むと、1993年の誕生日は決して7日間以内になることはないため、月と日のみを使用する必要があります。また、月の変更を考慮する必要があります。

たとえば、2月28日の誕生日と3月1日の誕生日は7日以内で、同じ月内ではありません。

SELECT * FROM user WHERE DATE_FORMAT(birthday, '%m-%d') >= DATE_FORMAT(NOW() - INTERVAL 7 DAY, '%m-%d') 

これは私が今どこにいるかですが、私はマイルがないことを知っています。

+0

なぜあなたの値を取得する間に使用し、その後、DATE_ADD使用しませんか? 'SELECT * FROM表WHERE date BETWEEN BETWEEN date1 and date2'? – Takarii

答えて

1

WHERE句で両方の日付を書式設定する必要があります。

select * 
from user 
where 
Curdate() between date_sub(CONCAT(YEAR(CURDATE()),'-', date_format(birthday, '%m-%d')), interval 7 day) 
and CONCAT(YEAR(CURDATE()),'-', date_format(birthday, '%m-%d')) ; 
+0

華麗なありがとう!これは月ロールオーバでも機能しますか? –

+1

あなたは文字列を比較していますが、年末には機能しません(例えば、12月27日を返す場合など) –

0

、月と日が7日の誕生日から来て削除して連結biy日付を作る(CURDATE()YEARと現在の年を取得し、確認してくださいそれをサブクエリとして使用し、新しい列の日の差が0と7の間であるかどうかを確認します。

クエリ

SELECT t.* -- select except the `new_col` 
FROM (SELECT *, 
      CAST((Concat(YEAR(NOW()), '-', DATE_FORMAT(dob, '%m-%d'))) AS DATE 
     ) AS 
       `new_col` 
    FROM `user`)t 
WHERE DATEDIFF(t.`new_col`, NOW()) BETWEEN 0 AND 7; 
0

テイク:CURDATEが範囲内にある場合

SELECT * 
FROM user 
WHERE DATE_FORMAT(birthday, '%m-%d') BETWEEN DATE_FORMAT(NOW(), '%m-%d') AND DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 7 DAY), '%m-%d') 
関連する問題