2010-10-05 10 views
29

Quiero encontrar registros en una tabla (Oracle SQL) usando el campo de fecha de creación donde los registros tienen más de 30 días. Sería bueno encontrar registros usando operadores como> pero si alguien puede sugerir SQL rápido donde la declaración de cláusula para encontrar registros anteriores a 30 días sería bueno. Sugiera la sintaxis de Oracle porque eso es lo que estoy usando.Oracle SQL Donde la cláusula para buscar registros de fecha anteriores a 30 días

Respuesta

51

Uso:

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

SYSDATE devuelve la fecha & tiempo; TRUNC restablece la fecha a partir de la medianoche, por lo que puede omitirla si desea creation_date que es 30 días anteriores, incluida la hora actual.

Dependiendo de sus necesidades, también se puede buscar en el uso ADD_MONTHS:

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

prefiero 'creation_date <= TRUNC (SYSDATE) - Intervalo de '1' month' :) –

+3

@be aquí ahora: eso está bien , siempre y cuando no le moleste si ORA-01839 "la fecha no es válida para el mes especificado" en algunos casos, p. ej. si creation_date es 31 de marzo. –

+1

hm, siempre he creído que la expresión 'interval' fue diseñada para manejar estas situaciones correctamente ... –

Cuestiones relacionadas