Come giustamente sottolineato da APC, la colonna start_date sembra essere un TIMESTAMP ma potrebbe essere un TIMESTAMP CON TIMEZONE LOCALE o TIMESTAMP CON il tipo di dati TIMEZONE. Questi potrebbero influenzare qualsiasi query che stavi facendo sui dati se il tuo server di database si trovava in un fuso orario diverso da te. Tuttavia, manteniamo questo semplice e presupponiamo che tu ti trovi nello stesso fuso orario del tuo server. Innanzitutto, per darti la sicurezza, controlla che start_date sia un tipo di dati TIMESTAMP.
Utilizzare il comando DESCRIBE di SQLPlus (o l'equivalente nell'IDE) per verificare che questa colonna sia un tipo di dati TIMESTAMP.
esempio
DESCRIVERE MyTable
dovesse manifestare:
Name Null? Type
----------- ----- ------------
NAME VARHAR2(20)
START_DATE TIMESTAMP
Se viene segnalato come un tipo = TIMESTAMP allora si può interrogare i tuoi intervalli di date con il più semplice conversione della data TO_TIMESTAMP, quella che richiede nessuna discussione (o immagine).
Utilizziamo TO_TIMESTAMP per garantire che qualsiasi indice nella colonna START_DATE venga considerato dall'ottimizzatore. La risposta di APC ha inoltre rilevato che un indice basato su funzione potrebbe essere stato creato su questa colonna e che influenzerebbe il predicato SQL ma non possiamo commentare in questa query. Se vuoi sapere come scoprire quali indici sono stati applicati alla tabella, posta un'altra domanda e possiamo rispondere separatamente.
Quindi, presumere che vi sia un indice su data_iniziale, che è un tipo di dati TIMESTAMP e si desidera l'ottimizzatore di prendere in considerazione, il vostro SQL sarebbe:
select * from mytable where start_date between to_timestamp('15-JAN-10') AND to_timestamp('17-JAN-10')+.9999999
+.999999999 è molto vicino ma isn' t abbastanza 1 quindi la conversione di 17-JAN-10 sarà il più vicino alla mezzanotte di quel giorno possibile, quindi la query restituisce entrambe le righe.
Il database vedrà l'TRA come da 15-GEN-10 00: 00: 00: 0000000 a 17-GEN-10 23: 59: 59: 99999 e sarà quindi comprendere tutte le date dal 15, 16 e 17 gennaio 2010 qualunque sia la componente temporale del timestamp.
Spero che questo aiuti.
Dazzer
fonte
2010-03-03 11:39:39
Non posso passare la data unica di ora. –
wow funziona bene APC ... grazie mille per il tuo supporto –
@APC ha funzionato come un fascino in ORACLE 11 G – Alex