Oracle时间戳精度未遵守

时间:2015-09-03 04:24:29

标签: database oracle timestamp

我在Oracle中创建了一个表

CREATE TABLE clock
(
Year TIMESTAMP(3)
);

我插入了一个值,希望它以3位十进制数字精度存储。

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

但是,当我运行一个select查询时,它会给出带有9十进制精度的输出

select * from clock;

输出:

01-JAN-14 12.00.00.000000000 AM

预期输出

01-JAN-14 12.00.00.000 AM

我在这里做错了什么?

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

问题是您的默认TIMESTAMP格式。 试试这个应该有用。

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