2012-09-26 10 views
19

que tiene un campo de marca de tiempo y sólo quiero comparar la parte de la fecha de la misma en mi consulta en OracleOracle marca de tiempo en comparación con fecha

¿Cómo hago eso,

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

Debe ** no ** confiar en la conversión de datos implícitos. ''2012-01-01'' no es una fecha, es un carácter literal. Siempre debe usar 'to_date()' o un ANSI DATE literal para asegurarse de que su SQL no se rompa cuando la configuración de NLS sea diferente. –

Respuesta

37

Puede truncate la fecha parte:

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

el problema con este enfoque es que los índices en field1 no sería utilizado por la llamada a la función.

alternativa (y más amigable índice)

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

Puede limitar la fecha de

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

Mira el SQL Fiddle para más ejemplos.

0

to_date formato trabajado para mí. Tenga en cuenta los formatos de fecha: 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') 
Cuestiones relacionadas