2012-01-13 27 views
31

Necesito buscar filas que caen dentro del marco de tiempo particular.Oracle SQL: timestamps in where cláusula

select * 
from TableA 
where startdate >= '12-01-2012 21:24:00' 
    and startdate <= '12-01-2012 21:25:33' 

es decir, buscar las filas con la precisión de segundos de la marca de tiempo, ¿cómo logro esto?

+0

¿Cuál es el esquema de la tabla? – simchona

+0

¿Qué sucede si usa la consulta en la pregunta? –

+0

El campo en cuestión es "TIMESTAMP", – sid

Respuesta

71

Es necesario utilizar to_timestamp() para convertir la cadena en un valor de marca de tiempo adecuado:

to_timestamp('12-01-2012 21:24:00', 'dd-mm-yyyy hh24:mi:ss') 

Si la columna es de tipo DATE (que también es compatible con segundos), es necesario utilizar to_date()

to_date('12-01-2012 21:24:00', 'dd-mm-yyyy hh24:mi:ss') 

Para conseguir esto en una condición en que utilice el siguiente:

select * 
from TableA 
where startdate >= to_timestamp('12-01-2012 21:24:00', 'dd-mm-yyyy hh24:mi:ss') 
    and startdate <= to_timestamp('12-01-2012 21:25:33', 'dd-mm-yyyy hh24:mi:ss') 

Nunca se necesita utilizar to_timestamp() en una columna que es de tipo `marca de tiempo'

edición corregida errata

+0

Aparece un error: "ORA-01830: la imagen de formato de fecha finaliza antes de convertir toda la cadena de entrada" aquí está mi consulta: "select * from TableA donde To_Timestamp (startdate, 'DD-MM-YYYY HH24: MI: SS ')> To_Timestamp ('12 -01-2012 21:24:00', 'DD-MM-YYYY HH24: MI: SS'); " – sid

+0

El valor en el campo es "12-JAN-12 09.24.06.355000000 PM" y es un campo TimeStamp en Oracle db – sid

+0

@ user1095057: no es necesario aplicar 'to_timestamp()' en su columna, pero en su entrada valores. Ver mi edición –