この問題を考える最良の方法は、日付をその年の日に対応する0から365までの数値に変換することです。次に、この差が14未満の日付を選択するだけで、2週間のウィンドウが得られます。
それは年の初めか終わりに崩壊するでしょう。しかし、単純なモジュラー演算で答えが得られます。
幸い、MySQLにはDAYOFYEAR(date)
があります 、それほど複雑ではありません:
SELECT * FROM tbl t
WHERE
MOD(DAYOFYEAR(currdate) - DAYOFYEAR(t.the_date) + 365, 365) <= 14
OR MOD(DAYOFYEAR(t.the_date) - DAYOFYEAR(currdate) + 365, 365) <= 14
その余分な+ 365
MySQLのMODは負の数を返すため、が必要です。
この回答はうるう年を正しく考慮していません。今年がうるう年ではなく、年末から14日以内の場合は、含めるべき1月の1日を逃します。それが気になる場合は、365
を置き換える必要があります [the number of days in the year - 1
]。