2010-03-31 15 views
12

Ok penso che sto ottenendo l'anno precedente invece del giorno precedente, ma ho bisogno del giorno precedente.Oracle ottiene i record del giorno precedente

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

che sto paragonando a un timbro datetime in questo formato e che desiderano ottenere tutte le righe del giorno precedente.

YYYY-MM-DD HH:MM:SS 

Così sto cercando qualcosa di simile

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

Supponendo che datetime_field sia di tipo DATE, il codice dovrebbe funzionare. Tuttavia, stai convertendo una data in una stringa e torna a una data senza motivo. Usa la risposta di shahkalpesh. –

+0

Il motivo della conversione è Voglio solo la DATA, non la DATA/ORA –

risposta

21

come su sysdate?

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

SYSDATE aggiunge l'ora, voglio solo la data –

+3

trunc (sysdate-1) – eschneider

+0

TRUNC () simpatico! Non ho pensato di utilizzare questo trunc –

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

Il suo stato un po 'di tempo che ho lavorato su Oracle. Ma, penso che questo dovrebbe funzionare.

+0

CURRENT_DATE aggiunge l'ora, voglio solo la data –

4

È possibile rimuovere la parte di tempo di una data utilizzando TRUNC.

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

Quella query ti darà tutte le righe con le date a partire da ieri. Notare il secondo argomento su trunc(). Puoi usare questo per troncare qualsiasi parte della data.

Se il datetime_fied contiene '2011-05-04 08:23:54', la seguente data verrà restituito

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

questo

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

funzionerà. La domanda è: il 'datetime_field' ha lo stesso formato di sysdate? Il mio modo di gestirlo: usa la funzione 'to_char()' (funziona solo in Oracle).

campioni: giorno precedente:

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

o data

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.. 

confrontando:

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

intervallo di tempo tra ieri e il giorno prima di ieri:

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') 

altro tempo gammavariazione

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

Penso che si può anche eseguire questo comando:

select (sysdate-1) PREVIOUS_DATE da dual;

Problemi correlati