我在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
我在这里做错了什么?
答案 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';