Có vẻ như bạn đang cố gắng thực hiện việc này:
WHERE specific_date < (NOW() + 5 days)
Trước hết, hãy suy nghĩ kỹ về các trường hợp ranh giới. Các trường hợp ranh giới này có thể cắn mắt cá chân của bạn trong SQL. Bạn có thực sự muốn
WHERE specific_date <= (NOW() + 5 days)
Thực hiện specific_date
của bạn cột thời gian chỉ chứa ngày (đó là những ngày có thời gian bằng nửa đêm) hay chúng chứa ngày và giờ? Nếu bạn sắp đạt được kết quả mong muốn, bạn cần phải cẩn thận về những chi tiết đó.
Ở bất kỳ mức độ nào, hãy thử điều này:
WHERE specific_date <= DATE_ADD(NOW(), INTERVAL 5 DAY)
Đây là một cách tốt để thực hiện việc tra cứu như vậy. Giá trị cột đứng một mình ở một bên của vị từ bất đẳng thức (<=
) để mySQL có thể thực hiện quét phạm vi chỉ mục nếu bạn có chỉ mục trên cột.
Số học ngày tháng trong MySQL khá linh hoạt. Bạn có thể làm
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
và vân vân.