Изглежда, че се опитвате да направите това:
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
и така нататък.