2012-01-24 16 views

Respuesta

51

El número entre paréntesis indica la precisión de fracciones de segundo para ser almacenados. Por lo tanto, (0) significaría que no almacenaría ninguna fracción de segundo y usaría segundos enteros. El valor predeterminado si no especificado es de 6 dígitos después del separador decimal.

lo tanto, un valor no especificado almacenaría una fecha como: sólo

TIMESTAMP 24-JAN-2012 08.00.05.993847 AM 

y especificando (0) tiendas:

TIMESTAMP(0) 24-JAN-2012 08.00.05 AM 

See Oracle documentation on data types.

+0

THX mucho que era más rápido por lo que acepta su respuesta aunque ambos son correcto – hudi

+3

@hudi - obviamente ni Michael ni yo necesitamos los puntos, así que no estoy buscando representantes aquí. El principio general es que debe aceptar la * mejor * respuesta, no simplemente la primera (a menos que la primera también sea la mejor). Tenga esto en cuenta cuando adjunte respuestas en el futuro. – APC

+2

Para ser claros, no estoy diciendo que la respuesta de Michael no sea mejor que la mía. – APC

27

sencillamente el número es la precisión de la marca de tiempo, la fracción de segundo que se mantiene en la columna:

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> 

Si no especificamos una precisión, la marca de tiempo se establece de forma predeterminada en seis lugares.

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> 

Tenga en cuenta que estoy corriendo en Linux por lo que mi columna TIMESTAMP en realidad me da la precisión con seis cifras es decir microsegundos. Este también sería el caso en la mayoría (¿todos?) Los sabores de Unix. En Windows, el límite es tres lugares, es decir, milisegundos. (¿Sigue siendo cierto de los sabores más modernos de Windows? Citación necesaria).

Como era de esperar, la documentación cubre esto. Find out more.


"cuando se crea marca de tiempo (9) Esto le da derecho Nanos"

Sólo si el sistema operativo es compatible con ella. Como se puede ver, mi aparato OEL no:

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> 

(aquellos ceros podría ser una coincidencia, pero no lo son.)

+0

hm pero cuando creas la marca de tiempo (9) esto te da nanos ¿no? – hudi

Cuestiones relacionadas