Похоже, вы пытаетесь это сделать:
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
и пр.