如何从 Oracle 日期获取 unix 纪元?
Posted
技术标签:
【中文标题】如何从 Oracle 日期获取 unix 纪元?【英文标题】:How do I get the unix epoch from Oracle date? [duplicate] 【发布时间】: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 一些将时间戳转换为纳秒和纳秒转换为时间戳的方法。这些方法不受时区影响,精度为纳秒级。 【参考方案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 以外的任何时区。以上是关于如何从 Oracle 日期获取 unix 纪元?的主要内容,如果未能解决你的问题,请参考以下文章