今天在对某些timestamp类型的数据进行运算的过程中,发现毫秒数据都丢失了。
我们做个简单的测试,创建一个测试表只包含一列,数据类型为
timestamp,然后插入两条记录。
- SQL>
- SQL> select * from v$version;
-
- BANNER
- ----------------------------------------------------------------
- Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
- PL/SQL Release 10.2.0.4.0 - Production
- CORE 10.2.0.4.0 Production
-
- TNS for 64-bit Windows: Version 10.2.0.4.0 - Production
- NLSRTL Version 10.2.0.4.0 - Production
-
- SQL>
- SQL> create table hoegh(h timestamp(6));
-
- Table created
-
- SQL> desc hoegh
- Name Type Nullable Default Comments
- ---- ------------ -------- ------- --------
- H TIMESTAMP(6) Y
-
- SQL>
- SQL> insert into hoegh values(systimestamp);
-
- 1 row inserted
-
- SQL> insert into hoegh values(systimestamp-1);
-
- 1 row inserted
-
- SQL> commit;
-
- Commit complete
-
- SQL> select * from hoegh;
-
- H
- --------------------------------------------------------------------------------
- 25-6月 -16 05.39.04.609000 上午
- 24-6月 -16 05.39.12.000000 上午
-
- SQL>
- SQL>
我们看到第一条数据包含毫秒数据,而第二条数据的毫秒数据为0。那么是凑巧了吗,当然不是。
那么,如何保留毫秒数据呢?我们可以使用numtodsinterval函数。
numtodsinterval(<x>,<c>) 其中, x是一个数字, c是一个字符串,表明x的单位,这个函数把x转为interval day to second数据类型 常用的单位有 ('day','hour','minute','second')
接下来,我们通过例子看一下这个函数的用法。
- SQL> insert into hoegh values(systimestamp+numtodsinterval(-1,'day'))--减一天
- 2 ;
-
- 1 row inserted
-
- SQL> insert into hoegh values(systimestamp+numtodsinterval(-1,'hour'))--减一小时
- 2 ;
-
- 1 row inserted
-
- SQL> insert into hoegh values(systimestamp+numtodsinterval(-1,'minute'))--减一分钟
- 2 ;
-
- 1 row inserted
-
- SQL> insert into hoegh values(systimestamp+numtodsinterval(-1,'second'))--减一秒
- 2 ;
-
- 1 row inserted
- SQL> insert into hoegh values(systimestamp+numtodsinterval(500/1000,'second'))--减500毫秒
- 2 ;
-
- 1 row inserted
-
- SQL> commit;
-
- Commit complete
-
- SQL> select * from hoegh;
-
- H
- --------------------------------------------------------------------------------
- 25-6月 -16 05.39.04.609000 上午
- 24-6月 -16 05.39.12.000000 上午
- 24-6月 -16 05.46.08.556000 上午
- 25-6月 -16 04.46.42.314000 上午
- 25-6月 -16 05.46.21.346000 上午
- 25-6月 -16 05.47.36.039000 上午
- 25-6月 -16 05.48.27.288000 上午
-
- 7 rows selected
-
- SQL>
~~~~~~~ the end~~~~~~~~~
hoegh
2016.06.24