2012-01-13 16 views
31

Devo cercare le righe che rientrano in un particolare intervallo di tempo.Oracle SQL: data/ora nella clausola where

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

, cioè cercare righe con una precisione di timestamp di secondi, come posso ottenere questo risultato?

+0

Qual è lo schema della tabella? – simchona

+0

Cosa succede se si utilizza la query nella domanda? –

+0

Il campo in questione è "TIMESTAMP", – sid

risposta

71

è necessario utilizzare to_timestamp() per convertire la stringa in un adeguato valore di timestamp:

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

Se la colonna è di tipo DATE (che supporta anche secondi), è necessario utilizzare to_date()

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

Per ottenere questo in una condizione di cui utilizzare il seguente:

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

hai mai bisogno di utilizzare to_timestamp() su una colonna che è di tipo `timestamp'

Modifica corretto errore di battitura

+0

Ho ricevuto un errore: "ORA-01830: l'immagine in formato data termina prima di convertire l'intera stringa di input" ecco la mia query: "seleziona * da TableA dove 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

Il valore nel campo è "12-JAN-12 09.24.06.355000000 PM" e è un campo TimeStamp in oracle db – sid

+0

@ user1095057: non è necessario applicare 'to_timestamp()' sulla colonna ma sul proprio input valori. Vedi la mia modifica. –