【问题标题】:How do I get the unix epoch from Oracle date? [duplicate]如何从 Oracle 日期获取 unix 纪元?
【发布时间】:2017-08-22 18:32:28
【问题描述】:

在使用 Oracle SQL 获取 unix 纪元时间戳方面,有​​没有比这更好更快的解决方案?:

SQL> select (cast(sysdate as date) - cast(to_date('1970-01-01', 'YYYY-MM-DD') as date)) * 86400 as unixepoch from dual;

 UNIXEPOCH
----------
1490789604;

Oneliner 首选 ;)

【问题讨论】:

  • 我已经发布了here 一些将时间戳转换为纳秒和纳秒转换为时间戳的方法。这些方法不受时区影响,精度为纳秒级。

标签: sql oracle date unix epoch


【解决方案1】:

仅当您的数据库时区为 UTC 时,上述答案才正确。 Unix 时间始终采用 UTC。 无论配置如何,适用于任何数据库的正确答案是:

--Convert current time to epoch.
select (cast (systimestamp at time zone 'UTC' as date) - date '1970-01-01') * 86400
from dual

--Convert hard-coded timestamp to epoch.
select (cast (timestamp '2019-12-31 23:59:59' at time zone 'UTC' as date) - date '1970-01-01') * 86400
from dual;

【讨论】:

  • 如果我有一个日期列而不是当前时间或硬编码时间戳怎么办?
【解决方案2】:

您不需要将值转换为日期,因为它们已经是日期。

SELECT ( SYSDATE - DATE '1970-01-01' ) * 86400 AS unixepoch
FROM   DUAL;

【讨论】:

  • 这不适用于除 UTC 以外的任何时区。
猜你喜欢
  • 2013-05-12
  • 2016-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
相关资源
最近更新 更多