如何在運算過程中保留timestamp型別資料的毫秒精度?

Hoegh發表於2016-06-24
今天在對某些timestamp型別的資料進行運算的過程中,發現毫秒資料都丟失了。
我們做個簡單的測試,建立一個測試表只包含一列,資料型別為timestamp,然後插入兩條記錄。

點選(此處)摺疊或開啟

  1. SQL>
  2. SQL> select * from v$version;

  3. BANNER
  4. ----------------------------------------------------------------
  5. Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
  6. PL/SQL Release 10.2.0.4.0 - Production
  7. CORE    10.2.0.4.0    Production

  8. TNS for 64-bit Windows: Version 10.2.0.4.0 - Production
  9. NLSRTL Version 10.2.0.4.0 - Production

  10. SQL>
  11. SQL> create table hoegh(h timestamp(6));

  12. Table created

  13. SQL> desc hoegh
  14. Name Type Nullable Default Comments
  15. ---- ------------ -------- ------- --------
  16. H TIMESTAMP(6) Y

  17. SQL>
  18. SQL> insert into hoegh values(systimestamp);

  19. 1 row inserted

  20. SQL> insert into hoegh values(systimestamp-1);

  21. 1 row inserted

  22. SQL> commit;

  23. Commit complete

  24. SQL> select * from hoegh;

  25. H
  26. --------------------------------------------------------------------------------
  27. 25-6月 -16 05.39.04.609000 上午
  28. 24-6月 -16 05.39.12.000000 上午

  29. SQL>
  30. SQL>
我們看到第一條資料包含毫秒資料,而第二條資料的毫秒資料為0。那麼是湊巧了嗎,當然不是。
那麼,如何保留毫秒資料呢?我們可以使用numtodsinterval函式。
numtodsinterval(<x>,<c>) 
其中,
x是一個數字,
c是一個字串,表明x的單位,這個函式把x轉為interval day to second資料型別
常用的單位有 ('day','hour','minute','second')

接下來,我們透過例子看一下這個函式的用法。

點選(此處)摺疊或開啟

  1. SQL> insert into hoegh values(systimestamp+numtodsinterval(-1,'day'))--減一天
  2.   2 ;

  3. 1 row inserted

  4. SQL> insert into hoegh values(systimestamp+numtodsinterval(-1,'hour'))--減一小時
  5.   2 ;

  6. 1 row inserted

  7. SQL> insert into hoegh values(systimestamp+numtodsinterval(-1,'minute'))--減一分鐘
  8.   2 ;

  9. 1 row inserted

  10. SQL> insert into hoegh values(systimestamp+numtodsinterval(-1,'second'))--減一秒
  11.   2 ;

  12. 1 row inserted
  13. SQL> insert into hoegh values(systimestamp+numtodsinterval(500/1000,'second'))--減500毫秒
  14.   2 ;

  15. 1 row inserted

  16. SQL> commit;

  17. Commit complete

  18. SQL> select * from hoegh;

  19. H
  20. --------------------------------------------------------------------------------
  21. 25-6月 -16 05.39.04.609000 上午
  22. 24-6月 -16 05.39.12.000000 上午
  23. 24-6月 -16 05.46.08.556000 上午
  24. 25-6月 -16 04.46.42.314000 上午
  25. 25-6月 -16 05.46.21.346000 上午
  26. 25-6月 -16 05.47.36.039000 上午
  27. 25-6月 -16 05.48.27.288000 上午

  28. 7 rows selected

  29. SQL>


                                                                                                       ~~~~~~~ the end~~~~~~~~~
                                                                                                                                                                                                               hoegh
                                                                                                                                                                                                           2016.06.24


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30162081/viewspace-2120906/,如需轉載,請註明出處,否則將追究法律責任。

相關文章