2010-03-31 30 views
12

Ok, creo que estoy obteniendo el año anterior en lugar del día anterior, pero necesito hacerlo el día anterior.Oracle obtenga registros de días anteriores

SELECT TO_DATE(TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD'),'YYYY-MM-DD') - 1 FROM Dual 

me estoy comparando con un sello de fecha y hora en este formato y el deseo de obtener todas las filas desde el día anterior.

YYYY-MM-DD HH:MM:SS 

Así que estoy tratando de hacer algo como esto

SELECT field,datetime_field 
FROM database 
WHERE datetime_field > TO_DATE(TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD'),'YYYY-MM-DD') - 1 
+0

Suponiendo que datetime_field es del tipo DATE, tu código debería funcionar. Sin embargo, está convirtiendo una fecha en una cadena y regresando a una fecha sin motivo. Usa la respuesta de shahkalpesh. –

+0

La razón de la conversión es que sólo desea que la fecha, no la FECHA/HORA –

Respuesta

21

¿qué tal sysdate?

SELECT field,datetime_field 
FROM database 
WHERE datetime_field > (sysdate-1) 
+0

agrega el momento, sólo quiero la fecha –

+3

trunc (sysdate-1) – eschneider

+0

TRUNCAR () ¡bonito! No pensé en usar este –

2
SELECT field,datetime_field 
FROM database 
WHERE datetime_field > (CURRENT_DATE - 1) 

Su sido un tiempo que trabajé en Oracle. Pero, creo que esto debería funcionar.

+0

CURRENT_DATE agrega el momento, sólo quiero la SYSDATE fecha –

4

Se puede quitar la parte de tiempo de una fecha utilizando TRUNC.

select field,datetime_field 
    from database 
where datetime_field >= trunc(sysdate-1,'DD'); 

Esa consulta le dará todas las filas con fechas desde ayer. Tenga en cuenta el segundo argumento para trunc(). Puede usar esto para truncar cualquier parte de la fecha.

Si su datetime_fied contiene '2011-05-04 08:23:54', la siguiente fecha será devuelto

trunc(datetime_field, 'HH24') => 2011-05-04 08:00:00 
trunc(datetime_field, 'DD') => 2011-05-04 00:00:00 
trunc(datetime_field, 'MM') => 2011-05-01 00:00:00 
trunc(datetime_field, 'YYYY') => 2011-00-01 00:00:00 
1

este

SELECT field,datetime_field 
FROM database 
WHERE datetime_field > (sysdate-1) 

va a funcionar. La pregunta es: ¿el 'datetime_field' tiene el mismo formato que sysdate? Mi manera de manejar eso: use la función 'to_char()' (solo funciona en Oracle).

muestras: día anterior:

select your_column 
from your_table 
where to_char(sysdate-1, 'dd.mm.yyyy') 

o fecha

select extract(day from date_field)||'/'|| 
     extract(month from date_field)||'/'|| 
     extract(year from date_field)||'/'|| 
as mydate 
from dual(or a_table) 
where extract(day from date_field) = an_int_number and 
     extract(month from date_field) = an_int_number and so on.. 

comparando:

select your_column 
from your_table 
where 
to_char(a_datetime_column, 'dd.mm.yyyy') > or <or>= or <= to_char(sysdate, 'dd.mm.yyyy') 

rango de tiempo entre ayer y antes de ayer:

select your_column 
from your_table 
where 
to_char(a_datetime_column, 'dd.mm.yyyy') > or <or>= or <= to_char(sysdate-1, 'dd.mm.yyyy') and 
to_char(a_datetime_column, 'dd.mm.yyyy') > or <or>= or <= to_char(sysdate-2, 'dd.mm.yyyy') 

otra gamavariación tiempo

select your_column 
from your_table 
where 
to_char(a_datetime_column, 'dd.mm.yyyy') is between to_char(sysdate-1, 'dd.mm.yyyy') 
and to_char(sysdate-2, 'dd.mm.yyyy') 
0

Creo que también se puede ejecutar este comando:

seleccione (sysdate-1) PREVIOUS_DATE desde dual;

Cuestiones relacionadas