2012-01-04 30 views

Trả lời

41

Bạn muốn sử dụng intervalcurrent_date:

select * from books where returned_date > current_date - interval '7 days' 

này sẽ trả lại dữ liệu từ tuần trước bao gồm ngày hôm nay.

Here's more khi làm việc với ngày trong Postgres.

+5

Điều này thực sự truy lục 8 ngày kể cả ngày hiện tại, chứ không phải là 7. –

+0

Bắt tốt. Chỉnh sửa nó để phản ánh điều đó. – yiwei

31

đơn giản và chính xác:

SELECT * FROM books WHERE returned_date > now()::date - 7 
  • now()::date is the Postgres implementation of standard SQL CURRENT_DATE. Cả hai đều làm chính xác như nhau trong PostgreSQL. Chỉ cần chứng minh.

  • now()::date - 7 hoạt động vì người ta có thể trừ/thêm integer giá trị (= ngày) từ/đến date. Số không được bỏ qua như 7 là mặc định bằng chữ số theo số integer trong khi chỉ chứa chữ số và ký hiệu hàng đầu tùy chọn, do đó, không cần phải có một diễn viên rõ ràng.

    Bạn cũng có thể hoạt động với interval, nhưng điều này đơn giản và nhanh hơn cho date. Với data type timestamp, bạn sẽ phải cộng/trừ số interval, như @Eric minh họa.

  • Tính toán độc lập với loại dữ liệu thực tế returned_date, loại kết quả ở bên phải của toán tử sẽ bị ép buộc khớp với nhau (và nêu ra lỗi nếu không truyền được đăng ký).

  • Đối với "tuần qua":
    Để bao gồm hôm nay làm cho nó > current_date - 7 hoặc >= current_date - 6.
    Để loại trừ ngày hôm nay làm cho nó BETWEEN current_date - 7 AND current_date - 1 (hoặc tương tự). >= current_date - 7 vì các câu trả lời khác đề xuất trả về hàng cho 8 ngày qua thay vì 7 và sai, nói đúng.

Các vấn đề liên quan