2010-10-05 17 views
29

Kayıtların 30 günden eski olduğu oluşturma tarihi alanını kullanarak bir (Oracle SQL) tablosundaki kayıtları bulmak istiyorum. > Gibi operatörleri kullanarak kayıt bulmak güzel olurdu ama eğer herkes kısa bir SQL önerebilirse, cümleciğin 30 günden eski kayıtları bulmak güzel olur. Lütfen kullandığım şey olan Oracle sözdizimini önerin.Oracle SQL Madde 30 günden eski tarih kayıtlarını bulmak için burada

cevap

51

Kullanım:

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

SYSDATE tarihini & saati döndürür; TRUNC, gece yarısından itibaren olmaya tarihini sıfırlar; böylece, geçerli zaman dahil olmak üzere 30 gün önce creation_date olmasını istiyorsanız, bunu ihmal edebilirsiniz.

ihtiyaçlarınıza bağlı olarak, ayrıca ADD_MONTHS kullanarak bakmak olabilir:

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

ben 'tercih creation_date <= TRUNC (SYSDATE) - aralığını '1' month' :) –

+3

@be burada şimdi: bu iyi Bazı durumlarda, ORA-01839 "tarihin belirtilen ay için geçerli olmaması" ile başarısız olup olmadığını bilmediğiniz sürece eğer creation_date 31 Mart ise. –

+1

hm, 'interval' ifadesinin bu durumları doğru bir şekilde ele alacak şekilde tasarlandığına inandım. –