2012-09-26 22 views
19

Ho un campo timestamp e voglio solo per confrontare la parte relativa alla data di esso nella mia query in OracleOracle a confronto timestamp con la data

Come faccio a farlo,

SELECT * 
FROM Table1 
WHERE date(field1) = '2012-01-01' 
+2

Si dovrebbe ** non ** contare sulla conversione dei dati implicita. "'2012-01-01'' non è una data, è un personaggio letterale. Devi sempre usare 'to_date()' o un valore letterale ANSI DATE per assicurarti che il tuo SQL non si interrompa quando le impostazioni di NLS sono diverse. –

risposta

37

È possibile truncate la data parte:

select * from table1 where trunc(field1) = to_date('2012-01-01', 'YYYY-MM-DD') 

il problema di questo approccio è che qualsiasi indice su field1 non sarebbe stato utilizzato a causa della chiamata di funzione.

In alternativa (e più accogliente index)

select * from table1 
where field1 >= to_timestamp('2012-01-01', 'YYYY-MM-DD') 
    and field1 < to_timestamp('2012-01-02', 'YYYY-MM-DD') 
3

È possibile troncare la data

SELECT * 
FROM Table1 
WHERE trunc(field1) = to_Date('2012-01-01','YYY-MM-DD') 

sguardo al SQL Fiddle per ulteriori esempi.

0

formato to_date ha funzionato per me. Si prega di considerare i formati della data: MON-, MM, ., -.

t.start_date >= to_date('14.11.2016 04:01:39', 'DD.MM.YYYY HH24:MI:SS') 
t.start_date <=to_date('14.11.2016 04:10:07', 'DD.MM.YYYY HH24:MI:SS') 
Problemi correlati