2015-09-03 38 views
0

我在甲骨文甲骨文時間戳精度不服從

CREATE TABLE clock 
(
Year TIMESTAMP(3) 
); 

創建的表我插入值,並希望它會被存儲3位十進制數字精度。

insert 
into clock (Year) 
values (TIMESTAMP '2014-01-01 00:00:00.000'); 
commit; 

然而當我運行一個選擇查詢它給輸出與9小數精密度

select * from clock; 

輸出:

01-JAN-14 12.00.00.000000000 AM

預期輸出

01-JAN-14 12.00.00.000 AM

我在這做錯了什麼?

回答

2

數據被存儲三個十進制數字精度,它只是沒有被顯示有3位精度,大概是因爲你的數據庫的NLS設置。

如果您插入的數字的精度超過3位數,則多餘的數字會被截斷。例如,嘗試運行

insert into clock (Year) values (TIMESTAMP '2014-01-01 12:34:56.123456789'); 

然後

select * from clock; 

應該返回

01-JAN-14 12.00.00.000000000 AM 
01-JAN-14 12.34.56.123000000 PM 

如果你不想顯示多餘的數字,那麼你可以試試,而不是執行以下操作:

select to_char(Year, 'DD-MON-RR HH.MI.SSXFF3 AM') from clock; 
+0

感謝盧克..我現在明白髮生了什麼。實際上,數據只能存儲到3個精確數字。 –

1

問題是你的默認的TIMESTAMP格式。 試試這個然後應該工作。

ALTER SESSION SET nls_timestamp_format = 'DD-MON-YY HH:MI:SSXFF3 AM'; 
+0

感謝您的建議。但是我不想更改NLS設置。我可以改變我的選擇查詢(我已經完成),以獲得我想要的格式輸出。盧克的回答告訴我到底發生了什麼:) –