Điều này sẽ mang lại cho bạn tháng trước:
WHERE dateColumn BETWEEN SUBDATE(CURDATE(), INTERVAL 1 MONTH) AND NOW();
Điều này từ đầu tháng:
WHERE dateColumn BETWEEN STR_TO_DATE('2012-09-01', '%Y-%m-%d') AND NOW();
BETWEEN không có gì đặc biệt, nó chỉ là một phím tắt của
dateColumn <= ... AND dateColumn >= ....
Rất tiếc, tôi đoán rằng so sánh NOW () không thực sự cần thiết, vì tất cả các bản ghi sẽ có trước bây giờ.
Vì vậy, chỉ cần làm:
WHERE dateColumn >= STR_TO_DATE('2012-09-01', '%Y-%m-%d')
Đầu động của tháng hiện tại:
WHERE dateColumn >= CURDATE() - INTERVAL DAY(CURDATE())-1 DAY
Tất cả những việc này là trích xuất ngày trong tháng từ ngày hiện tại, sau đó lấy ngày đó trừ đi nhiều ngày.