首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Oracle PL/SQL获取当前时间戳编号19

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

Stack Overflow用户
提问于 2020-02-20 17:43:05
回答 3查看 148关注 0票数 1

在Oralce PL/SQL中有没有一种方法可以将当前时间戳作为一个数字来获取?

类似于“1582185277302”

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-20 17:44:56

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

代码语言:javascript
运行
复制
 (sysdate - date '1970-01-01') * 60 * 60 * 24

这给出了自1970年1月1日以来的秒数。

如果您想要以毫秒为单位的结果,则:

代码语言:javascript
运行
复制
(cast(systimestamp as date) - date '1970-01-01') * 24 * 60 * 60 * 1000 
+ mod( extract(second from systimestamp), 1) * 1000 
票数 1
EN

Stack Overflow用户

发布于 2020-02-20 18:11:40

Unix时间戳采用UTC时区。如果您的时间戳采用UTC时区,则可以使用:

代码语言:javascript
运行
复制
( TRUNC( your_timestamp, 'MI' ) - DATE '1970-01-01' ) * 24 * 60 * 60 * 1000
+ EXTRACT( SECOND FROM your_timestamp ) * 1000

如果你的时间戳有一个时区,那么:

代码语言:javascript
运行
复制
( TRUNC( your_timestamp AT TIME ZONE 'UTC', 'MI' ) - DATE '1970-01-01' ) * 24 * 60 * 60 * 1000
+ EXTRACT( SECOND FROM your_timestamp ) * 1000

如果你需要处理闰秒,那么你可以使用this answer

票数 1
EN

Stack Overflow用户

发布于 2020-02-20 18:09:16

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

代码语言:javascript
运行
复制
select systimestamp - timestamp '1970-01-01 00:00:00 UTC' as diff
from dual;

DIFF                  
----------------------
+18312 10:05:29.674905

然后,您可以使用内联视图或CTE提取和操作其中的元素以获取纪元时间,以避免重复间隔生成:

代码语言:javascript
运行
复制
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开始计算);但不允许使用闰秒。

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

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60316954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档