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.