2010-10-05 45 views
29

Tôi muốn tìm bản ghi trong bảng (Oracle SQL) bằng cách sử dụng trường ngày tạo nơi bản ghi cũ hơn 30 ngày. Nó sẽ là tốt đẹp để tìm hồ sơ bằng cách sử dụng một nhà khai thác như> nhưng nếu có ai có thể đề xuất nhanh chóng SQL where khoản tuyên bố để tìm hồ sơ cũ hơn 30 ngày mà sẽ được tốt đẹp. Vui lòng đề xuất cú pháp Oracle vì đó là những gì tôi đang sử dụng.Oracle SQL Where khoản để tìm hồ sơ ngày cũ hơn 30 ngày

Trả lời

51

Sử dụng:

SELECT * 
    FROM YOUR_TABLE 
WHERE creation_date <= TRUNC(SYSDATE) - 30 

SYSDATE trả về ngày & thời gian; TRUNC đặt lại ngày thành nửa đêm để bạn có thể bỏ qua nếu bạn muốn creation_date trước 30 ngày kể cả thời gian hiện tại.

Tùy thuộc vào nhu cầu của bạn, bạn cũng có thể xem xét sử dụng ADD_MONTHS:

SELECT * 
    FROM YOUR_TABLE 
WHERE creation_date <= ADD_MONTHS(TRUNC(SYSDATE), -1) 
+3

tôi thích 'CREATION_DATE <= TRUNC (SYSDATE) - khoảng thời gian '1' month' :) –

+3

@be ở đây bây giờ: đó là tốt , miễn là bạn không nhớ nếu nó không thành công với ORA-01839 "ngày không hợp lệ cho tháng được chỉ định" trong một số trường hợp, ví dụ nếu creation_date là ngày 31 tháng 3. –

+1

hm, tôi luôn tin rằng biểu thức 'interval' được thiết kế để xử lý những tình huống này một cách chính xác ... –

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