Cả hai giải pháp bao gồm ngày cuối cùng của tháng trước và cũng bao gồm tất cả "hôm nay".
Cho một date cột:
SELECT *
FROM tbl
WHERE my_date BETWEEN date_trunc('month', now())::date - 1
AND now()::date
Bạn có thể trừ các giá trị số nguyên thuần túy từ một date (nhưng không phải từ timestamp ) để trừ ngày. Đây là cách đơn giản và nhanh nhất.
Đối với timestamp cột:
SELECT *
FROM tbl
WHERE my_timestamp >= date_trunc('month', now()) - interval '1 day'
AND my_timestamp < date_trunc('day' , now()) + interval '1 day'
Lưu ý rằng tôi sử dụng < toán tử cho điều kiện thứ hai để có kết quả chính xác (~ "trước ngày mai").
Tôi không truyền đến date trong truy vấn thứ hai. Thay vào đó, tôi thêm interval '1 day' , để tránh truyền qua lại.
Hãy xem các loại ngày / giờ và các chức năng trong sách hướng dẫn.