2012-02-08 36 views
8

Deseo consultar todos los productos vendidos en los últimos 5 años.
Es posible hacerlo de esta manera:Consulta de los últimos 5 años

select * from products 
where time between sysdate-1826 and sysdate 

Pero existe también una manera más agradable en lugar de calcular todos los días y restarlo de sysdate?

+0

Esto se trata indirectamente con la respuesta de @JustinCave, pero 1826 días no es siempre igual a 5 años (un lapso de 5 años puede contener 1 o 2 años bisiestos). Es por eso que es mejor usar operadores que operan en meses o años enteros (que son consistentes). – Allan

Respuesta

17
SELECT * 
    FROM products 
WHERE date_column >= add_months(sysdate, -12*5) 

o

SELECT * 
    FROM products 
WHERE date_column >= sysdate - interval '5' year 

los dos para darle todas las filas de los últimos 5 años (aunque usted generalmente desee agregar a TRUNC para eliminar la porción de tiempo a menos que realmente le importe si se creó una fila el 8 de febrero de 2007 en la mañana o en la tarde).

+1

Nota con respecto al segundo ejemplo: la aritmética de intervalo levantará" ORA-01839: fecha no válida para el mes especificado "si sysdate pasa a ser un día bisiesto. –

0
select * from products 
where time > DATE_SUB(NOW(), INTERVAL 5 YEAR) 

Fecha sub restará 5 años a partir de ahora

+1

está en Oracle, no funcionará date_sub y now() –

+2

@James L - DATE_SUB no es una función disponible en Oracle. Creo que es una función de SQL Server. –

+0

Gracias, pero estaba obteniendo el siguiente error 'missing right parenthesis'. Luego encontré esto: [date_sub() dando error] (https://forums.oracle.com/forums/thread.jspa?threadID=2171098) y esta fue la solución: 'where time> SYSDATE - INTERVAL '5' AÑO ' –

Cuestiones relacionadas