Oracle中时间戳(毫秒)之间的差异

Ash*_*adi 5 sql oracle plsql oracle10g oracle11g

我有表test1并且有一个列DOJ,时间戳数据类型的记录很少,如下所示.在这里,我需要在doj和systimestamp之间的差异im毫秒.

SELECT DOJ FROM TEST1; 
DOJ 
---------------------------- 
21-MAR-14 09.25.34.514526000 
21-MAR-14 09.25.34.520345000 
22-MAR-14 09.25.34.523144000 
22-MAR-14 09.25.34.527770000 
23-MAR-14 09.25.34.532482000 
23-MAR-14 09.25.34.535603000 
24-MAR-14 09.25.34.538556000 
24-MAR-14 09.25.34.541729000 

SELECT SYSTIMESTAMP FROM DUAL; 
SYSTIMESTAMP 
-------------- 
24-MAR-14 09.48.10.251556000 +00:00 
Run Code Online (Sandbox Code Playgroud)

有人可以帮我这个.

Ale*_*ole 19

扩展René的答案,如果你想要总毫秒,那么你需要提取并组合通过从另一个时间戳中减去一个时间戳产生的间隔中的所有元素:

select doj, systimestamp - doj,
  trunc(1000 * (extract(second from systimestamp - doj)
    + 60 * (extract(minute from systimestamp - doj)
      + 60 * (extract(hour from systimestamp - doj)
        + 24 * (extract(day from systimestamp - doj) ))))) as milliseconds
from test1;

DOJ                          SYSTIMESTAMP-DOJ     MILLISECONDS
---------------------------- ---------------- ----------------
21-MAR-14 09.25.34.514526000 3 2:9:8.785713          266948785 
21-MAR-14 09.25.34.520345000 3 2:9:8.779894          266948779 
22-MAR-14 09.25.34.523144000 2 2:9:8.777095          180548777 
22-MAR-14 09.25.34.527770000 2 2:9:8.772469          180548772 
23-MAR-14 09.25.34.532482000 1 2:9:8.767757           94148767 
23-MAR-14 09.25.34.535603000 1 2:9:8.764636           94148764 
24-MAR-14 09.25.34.538556000 0 2:9:8.761683            7748761 
24-MAR-14 09.25.34.541729000 0 2:9:8.75851             7748758 
Run Code Online (Sandbox Code Playgroud)

SQL Fiddle,包括用于比较的Unix纪元日期,但您需要针对服务器时区进行调整.


Ren*_*ger 5

select
  extract(second from systimestamp - doj) * 1000
from
  test1;
Run Code Online (Sandbox Code Playgroud)

  • 当然,Alex Poole的答案是“更多”正确的。表达式“ extract(秒距systimestamp-doj)* 1000”仅返回“当前”分钟的毫秒部分。 (3认同)