2013-10-02 4 views
53

Quali sono le differenze tra i tipi Oracle DATE e TIMESTAMP? Entrambi hanno componente di data e ora? Qual è il tipo corrispondente in Java per questi tipi di data?Differenza tra oracle DATE e TIMESTAMP

+2

['TIMESTAMP'] (http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements001.htm#SQLRF00203) è uguale a' DATE', eccetto che ha aggiunto una precisione di secondi frazionari . – NullUserException

+4

La più grande differenza: 'DATE' è preciso al secondo e non ha secondi frazionari. 'TIMESTAMP' ha secondi frazionari. Il numero di posizioni decimali nei secondi dipende dal sistema operativo del server, ad esempio Oracle sul mio computer Windows 7 restituisce tre cifre decimali per il timestamp mentre l'enorme scatola Solaris di un client restituisce sei. I timestamp possono anche contenere un fuso orario specifico o essere normalizzati al fuso orario comune - vai [qui] (http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements001.htm) e quindi cerca " TIMESTAMP "per ulteriori informazioni, quindi prova un po ':) –

risposta

58

DATA e TIMESTAMP hanno la stessa dimensione (7 byte). Questi byte vengono utilizzati per memorizzare secolo, decennio, anno, mese, giorno, ora, minuto e secondi. Ma TIMESTAMP consente di memorizzare informazioni aggiuntive come secondi frazionari (11 byte) e secondi frazionari con fuso orario (13 byte).

TIMESTAMP è stato aggiunto come conforme ANSI a Oracle. Prima di ciò, aveva solo DATE.

In generale, è necessario utilizzare DATE. Ma se è necessaria precisione nel tempo, utilizzare TIMESTAMP.

E su Java, la classe oracle.sql.DATE dal driver JDBC Oracle, fornisce conversioni tra il tipo di dati Data/Timestamp Oracle e le classi Java java.sql.Date, java.sql.Time e java.sql.Timestamp .

+0

Una parola di avvertimento: sfortunatamente sembra che, per impostazione predefinita, quando si interroga una colonna DATE in Oracle, si restituisce solo il" giorno ", ma se si esegue il cast come TO_TIMESTAMP (DATE_COLUMN_NAME) quindi restituisce maggiore precisione. Che in qualche modo non è l'impostazione predefinita con jdbc/hibernate, almeno non è qui. – rogerdpack

+2

"In generale, dovresti usare DATE" - ma perché, esattamente? – siledh

+0

Ciao @siledh, penso che dovresti usare TIMESTAMP solo quando le informazioni aggiuntive (fuso orario) sono importanti per la tua applicazione. Voglio dire, dipende dalla tua logica di business. Ad esempio, è necessario scegliere TIMEZONE quando è necessario condividere i dati con applicazioni distribuite su piattaforme diverse e le informazioni temporali devono essere comprese senza ambiguità tra loro. –