2012-01-24 16 views

risposta

51

Il numero in parentesi specifica la precisione di frazioni di secondo da memorizzare. Quindi, (0) significherebbe non memorizzare alcuna frazione di secondo e utilizzare solo interi secondi. Il valore predefinito se non specificato è di 6 cifre dopo il separatore decimale.

Quindi un valore specificato sarebbe memorizzare una data come: solo

TIMESTAMP 24-JAN-2012 08.00.05.993847 AM 

e specificando (0) negozi:

TIMESTAMP(0) 24-JAN-2012 08.00.05 AM 

See Oracle documentation on data types.

+0

thx molto che è stato più veloce così ho accettato di rispondere anche se entrambi sono correggi – hudi

+3

@hudi - ovviamente né Michael né io abbiamo bisogno dei punti, quindi non sto inseguendo il rappresentante qui. Il principio generale è che dovresti accettare la * migliore * risposta, non semplicemente la prima (a meno che la prima sia anche la migliore). Ti preghiamo di tenerlo presente quando aggiusti le risposte in futuro. – APC

+2

Giusto per essere chiari, non sto dicendo che Michael non è una risposta migliore della mia. – APC

27

Molto semplicemente il numero è la precisione del timestamp, la frazione di secondo detenuta nella colonna:

SQL> create table t23 
    2 (ts0 timestamp(0) 
    3 , ts3 timestamp(3) 
    4 , ts6 timestamp(6) 
    5 ) 
    6/

Table created. 

SQL> insert into t23 values (systimestamp, systimestamp, systimestamp) 
    2/

1 row created. 

SQL> select * from t23 
    2/

TS0 
--------------------------------------------------------------------------- 
TS3 
--------------------------------------------------------------------------- 
TS6 
--------------------------------------------------------------------------- 
24-JAN-12 05.57.12 AM 
24-JAN-12 05.57.12.003 AM 
24-JAN-12 05.57.12.002648 AM 


SQL> 

Se non si specifica una precisione, il timestamp viene impostato su sei posizioni.

SQL> alter table t23 add ts_def timestamp; 

Table altered. 

SQL> update t23  
    2 set ts_def = systimestamp 
    3/

1 row updated. 

SQL> select * from t23 
    2/

TS0 
--------------------------------------------------------------------------- 
TS3 
--------------------------------------------------------------------------- 
TS6 
--------------------------------------------------------------------------- 
TS_DEF 
--------------------------------------------------------------------------- 
24-JAN-12 05.57.12 AM 
24-JAN-12 05.57.12.003 AM 
24-JAN-12 05.57.12.002648 AM 
24-JAN-12 05.59.27.293305 AM 


SQL> 

Nota che sto in esecuzione su Linux quindi la mia colonna TIMESTAMP in realtà mi dà la precisione a sei cifre ovvero microsecondi. Questo sarebbe anche il caso della maggior parte (tutti?) Sapori di Unix. Su Windows il limite è tre posizioni, vale a dire millisecondi. (È ancora vero per i gusti più moderni di Windows - è necessaria la citazione).

Come previsto, la documentazione copre questo. Find out more.


"quando si crea timestamp (9) questo ti dà Nanos giusto"

Solo se il sistema operativo lo supporta. Come si può vedere, il mio apparecchio OEL non lo fa:

SQL> alter table t23 add ts_nano timestamp(9) 
    2/

Table altered. 

SQL> update t23 set ts_nano = systimestamp(9) 
    2/

1 row updated. 

SQL> select * from t23 
    2/

TS0 
--------------------------------------------------------------------------- 
TS3 
--------------------------------------------------------------------------- 
TS6 
--------------------------------------------------------------------------- 
TS_DEF 
--------------------------------------------------------------------------- 
TS_NANO 
--------------------------------------------------------------------------- 
24-JAN-12 05.57.12 AM 
24-JAN-12 05.57.12.003 AM 
24-JAN-12 05.57.12.002648 AM 
24-JAN-12 05.59.27.293305 AM 
24-JAN-12 08.28.03.990557000 AM 


SQL> 

(Quei zeri finali potrebbero essere una coincidenza, ma non lo sono.)

+0

hm ma quando crei timestamp (9) questo ti dà nanos giusto? – hudi

Problemi correlati