Dường như bạn đang cố gắng để làm điều này:
WHERE specific_date < (NOW() + 5 days)
Trước hết, suy nghĩ cẩn thận về các trường hợp ranh giới. Những trường hợp biên 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)
làm specific_date
cột timestamps của bạn có chứa chỉ vài ngày (có nghĩa là ngày với thời gian tương đương với nửa đêm) hoặc làm chúng chứa ngày tháng và thời gian? Nếu bạn muốn nhận được kết quả mong muốn, bạn cần phải cẩn thận về những chi tiết đó.
Dù sao đi nữa, hãy thử này:
WHERE specific_date <= DATE_ADD(NOW(), INTERVAL 5 DAY)
Đây là một cách tốt để làm một tra cứu như vậy. Giá trị cột đứng một mình ở một bên của biến vị ngữ bất bình đẳng (<=
) để 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 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.
Nguồn
2011-10-10 12:37:58
Có cảm ơn, nó đã hoạt động. – sathish
Điều này có hoạt động với giờ làm việc không? ví dụ: 'WHERE specific_date <= DATE_ADD (NGAY(), INTERVAL 24 HOUR)' –
Có, xem chỉnh sửa của tôi. –