Có vẻ như bạn muốn các hàng có end_date
muộn hơn năm ngày trước.
Cách tốt nhất để đạt được điều đó là sử dụng
WHERE end_date >= CURDATE() - INTERVAL 5 DAY
Việc thêm số nguyên vào ngày tháng không hoạt động trong MySQL (đó là một thứ của Oracle). Vì vậy, bạn cần sử dụng đơn vị INTERVAL n unit
cú pháp.
Bạn sẽ nhận thấy rằng mệnh đề WHERE của tôi ở trên có chức năng tương đương với
WHERE DATE(end_date) + INTERVAL 5 DAY >= DATE(NOW())
Tuy nhiên, công thức đầu tiên tốt hơn công thức thứ hai vì hai lý do.
- nếu bạn đề cập đến
end_date
trong mệnh đề WHERE mà không cần gói nó trong các phép tính, truy vấn của bạn có thể khai thác một chỉ mục trên cột đó và có thể chạy nhanh hơn. -
DATE(NOW())
vàCURDATE()
cả hai đều đề cập đến thời điểm đầu tiên của ngày hôm nay (nửa đêm). NhưngCURDATE()
đơn giản hơn một chút.