Oracle PL/SQL获取当前时间戳编号19

Oracle PL/SQL获取当前时间戳编号19,sql,oracle,date,oracle11g,timestamp,Sql,Oracle,Date,Oracle11g,Timestamp,在Oralce PL/SQL中是否有方法将当前时间戳作为数字获取 类似于'1582185277302'您可以将当前日期/时间转换为历元时间戳,如下所示: (sysdate - date '1970-01-01') * 60 * 60 * 24 这将提供自1970年1月1日以来的秒数 如果希望以毫秒为单位显示结果,则: (cast(systimestamp as date) - date '1970-01-01') * 24 * 60 * 60 * 1000 + mod( extract(s

在Oralce PL/SQL中是否有方法将当前时间戳作为数字获取


类似于'1582185277302'

您可以将当前日期/时间转换为历元时间戳,如下所示:

 (sysdate - date '1970-01-01') * 60 * 60 * 24
这将提供自1970年1月1日以来的秒数

如果希望以毫秒为单位显示结果,则:

(cast(systimestamp as date) - date '1970-01-01') * 24 * 60 * 60 * 1000 
+ mod( extract(second from systimestamp), 1) * 1000 

如果从
systimestamp
中减去一个固定的时间戳,则得到一个间隔:

select systimestamp - timestamp '1970-01-01 00:00:00 UTC' as diff
from dual;

DIFF                  
----------------------
+18312 10:05:29.674905
然后,您可以使用内联视图或CTE提取并操纵该元素以获取历元时间,以避免重复间隔生成:

with t (diff) as (
  select systimestamp - timestamp '1970-01-01 00:00:00 UTC'
  from dual
)
select trunc(1000 * (
    extract (day from diff) * 24 * 60 *60
      + extract (hour from diff) * 60 * 60
      + extract (minute from diff) * 60
      + extract (second from diff)
  )) as epoch
from t;

              EPOCH
-------------------
      1582193129829
把所有的摘录加在一起会得到总的秒数,包括分数;乘以1000可以得到毫秒,但仍有分数(取决于平台支持的精度);截断只会给你毫秒

这需要考虑时区(纪元时间应该从UTC开始计算);但不允许闰秒

作为进一步的演示,在任意时区中使用固定时间获得问题的结果:

with t (diff) as (
  select timestamp '2020-02-20 02:54:37.302789 America/New_York' - timestamp '1970-01-01 00:00:00 UTC'
  from dual
)
select trunc(1000 * (
    extract (day from diff) * 24 * 60 *60
      + extract (hour from diff) * 60 * 60
      + extract (minute from diff) * 60
      + extract (second from diff)
  )) as epoch
from t;

              EPOCH
-------------------
      1582185277302

Unix时间戳位于UTC时区。如果时间戳位于UTC时区,则可以使用:

(TRUNC(您的时间戳'MI')-日期'1970-01-01')*24*60*60*1000
+提取(从您的时间戳中提取的秒)*1000
如果时间戳有时区,则:

(TRUNC(您在时区“UTC”、“MI”的时间戳)-日期“1970-01-01”)*24*60*60*1000
+提取(从您的时间戳中提取的秒)*1000

如果您需要处理闰秒,则可以使用。

谢谢,格式非常完美。尽管在测试系统上,这始终返回四舍五入到第二位的结果(最后3位始终为0)。编辑:你的编辑就像一个魔咒。非常感谢。我会尽快接受答案。@NathanBruissard:是的,毫秒部分见我答案的第二部分。