2012-01-24 150 views

回答

51

括號中的數字指定的分數秒的精度被存儲。所以,(0)意味着不會存儲任何秒的小數部分,並且只使用整秒。如果未指定,默認值是小數點後6位數字。

所以未指定的值將存儲就像一個日期:只有

TIMESTAMP 24-JAN-2012 08.00.05.993847 AM 

,並指定(0)店:

TIMESTAMP(0) 24-JAN-2012 08.00.05 AM 

See Oracle documentation on data types.

+0

THX很多,你也較快,所以我接受你的答案雖然兩者都是正確 – hudi

+3

@hudi - 顯然Michael和我都不需要點數,所以我不會在這裏追逐代表。總的原則是你應該接受*最好*答案,而不是簡單的第一個(除非第一個也是最好的)。在將來答覆答案時請記住這一點。 – APC

+2

要說清楚,我並不是說邁克爾的答案不是我的答案。 – APC

27

很簡單的數量是時間戳的精度,在列中保留第二部分:

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> 

如果我們沒有指定精度,那麼時間戳將默認爲6個位置。

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> 

請注意,我在Linux上運行,所以我TIMESTAMP柱,其實是給予我精度六個地方,即微秒。在Unix的大多數(全部)版本中,情況也是如此。在Windows上,限制是三個地方,即毫秒。 (這是最現代的Windows版本 - 這需要引用)。

正如可以預料的那樣,文檔涵蓋了這一點。 Find out more


「當你創建時間戳(9)這給你的Nano右」

只有當操作系統支持的話。正如你所看到的,我的OEL設備不會:

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> 

(那些尾隨零可能是一個巧合,但事實並非如此。)

+0

hm但是當你創建時間戳(9)這會給你nanos的權利? – hudi