これを行おうとしているようです:
WHERE specific_date < (NOW() + 5 days)
まず、境界の場合について慎重に考えてください。これらの境界ケースは、SQLで足首を噛む可能性があります。本当に欲しいですか
WHERE specific_date <= (NOW() + 5 days)
specific_date
を実行します 列のタイムスタンプには日(つまり、時刻が真夜中と等しい日付)のみが含まれていますか、それとも日付と時刻が含まれていますか?希望する結果を得るには、それらの詳細に注意する必要があります。
とにかく、これを試してください:
WHERE specific_date <= DATE_ADD(NOW(), INTERVAL 5 DAY)
これは、そのようなルックアップを行うための良い方法です。列の値は、不等式述語(<=
)の片側で独立しています。 )列にインデックスがある場合、mySQLはインデックス範囲スキャンを実行できます。
MySQLの日付演算は非常に柔軟です。できる
NOW() + INTERVAL 10 SECOND
NOW() - INTERVAL 2 MINUTE
NOW() + INTERVAL 4 HOUR
CURDATE() - INTERVAL 1 WEEK /* midnight one week ago */
LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 1 MONTH /*first day of present month*/
NOW() - INTERVAL 1 QUARTER
CURDATE() - INTERVAL 5 YEAR
など。