Làm thế nào để liệt kê các bản ghi có ngày từ 10 ngày qua?


101
SELECT Table.date FROM Table WHERE date > current_date - 10;

Điều này có hoạt động trên PostgreSQL không?

Câu trả lời:


190

Có, điều này không hoạt động trong PostgreSQL (giả sử cột " ngày " là của loại dữ liệu date) Tại sao bạn không thử nó?

Định dạng ANSI SQL tiêu chuẩn sẽ là:

SELECT Table.date 
FROM Table 
WHERE date > current_date - interval '10' day;

Tôi thích định dạng đó hơn vì nó giúp mọi thứ dễ đọc hơn (nhưng nó cũng giống như vậy current_date - 10).


1
Truy vấn phải là: SELECT Table.date FROM Table WHERE date> current_date - khoảng '10 ngày';
dùng2694306

4
@ user2694306: interval '10 day'là cú pháp Postgres. interval '10' daylà cú pháp dựa trên tiêu chuẩn SQL và cũng được hỗ trợ bởi Postgres
a_horse_with_no_name

1
khoảng thời gian phải là 9 . 10 thực sự mang lại cho bạn 11 ngày kể từ hôm nay.
David He

1
@DavidHe: điều này làm tương tự như câu trả lời ban đầu. Mà sử dụng 10, không9
a_horse_with_no_name

3
Chỉ cần lưu ý: Trên Redshift, công thức của @ user2694306 hoạt động: khoảng thời gian '10 ngày'. khoảng thời gian '10' ngày không hoạt động trên Redshift.
Ben,


9

Hiểu biết của tôi từ thử nghiệm của tôi (và PostgreSQL dox ) là các dấu ngoặc kép cần được thực hiện khác với các câu trả lời khác và cũng nên bao gồm "ngày" như thế này:

SELECT Table.date
  FROM Table 
  WHERE date > current_date - interval '10 day';

Được minh họa ở đây (bạn sẽ có thể chạy điều này trên bất kỳ db Postgres nào):

SELECT DISTINCT current_date, 
                current_date - interval '10' day, 
                current_date - interval '10 days' 
  FROM pg_language;

Kết quả:

2013-03-01  2013-03-01 00:00:00 2013-02-19 00:00:00

Trên thực tế, tôi đã không nhận thấy rằng câu trả lời của bradley đã đúng. Dù sao, tôi sẽ để lại của tôi ở đây để làm bằng chứng rằng đó là cách chính xác. Câu trả lời được chấp nhận là sai (ít nhất là đối với phiên bản Postgre mà tôi đang chạy)
Rất không thường xuyên

0

Tôi sẽ kiểm tra các kiểu dữ liệu.

current_date có kiểu dữ liệu "date", 10 là một số và Table.date - bạn cần nhìn vào bảng của mình.


0

bạn cũng có thể sử dụng:

SELECT Table.date
  FROM Table 
  WHERE date between current_date and current_date - interval '10 day';

Đầu tiên betweenphải có giá trị thấp nhất, vì vậy điều này sẽ được thực hiện chính xác là SELECT Table.date FROM Table WHERE date between current_date - interval '10 day' and current_date;
nhập
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.