如何在 Oracle 中获取 epoch 函数

Posted

技术标签:

【中文标题】如何在 Oracle 中获取 epoch 函数【英文标题】:How to get epoch function in Oracle 【发布时间】:2020-03-14 06:46:18 【问题描述】:
select * 
from sample_table scr 
where extract('epoch' from systimestamp - scr.created_date)/60 > :defaultTimeOut

这是一个 postgres 查询。试图将此查询转换为 oracle。

如何在 oracle 中转换 epoch?

TIA。

【问题讨论】:

究竟什么是“纪元”? @WilliamRobertson PostgreSQL EXTRACT documentation - 对于两次之间的间隔,“纪元”是间隔中的总秒数。如果您只是在谈论单个时间戳,那么纪元时间是自 1970-01-01T00:00:00 UTC 以来的秒数。 【参考方案1】:

您实际上是在尝试将间隔(即两个日期之间的差异)转换为秒数。假设created_datedate 数据类型,一种方法是:

select * 
from sample_table
where (sysdate - created_date) * 24 * 60 * 60 > :defaultTimeOut

基本原理:在 Oracle 中,减去两个日期会返回一个十进制数,表示天数的差异。您可以将其乘以 24(每天的小时数)、60(每小时的分钟数)和 60(每分钟的秒数),将其转换为秒数,然后将其与目标值进行比较。

如果created_datetimestamp 数据类型,您可以先将其转换为date

select * 
from sample_table
where (sysdate - cast(created_date as date)) * 24 * 60 * 60 > :defaultTimeOut

【讨论】:

感谢您的回复。它收到类似这样的错误“ORA-01867:间隔无效 01867。00000 -“间隔无效”*原因:您指定的字符串不是有效间隔。*操作:请指定有效间隔。“ @user12333071:这似乎工作正常in this db fiddle。您的数据库中created_date 列的数据类型是什么? 数据类型为时间戳 @user12333071:我用timestamps 的解决方案更新了我的答案

以上是关于如何在 Oracle 中获取 epoch 函数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Redshift 中获取纪元时间?

如何在 oracle sql 中再次使用 MAX 和 MIN 函数获取值?

PostgreSQL中epoch的用法

在 Python 3.6.9 中以纳秒为单位获取 Epoch 时间戳

提前 30 分钟获取 Android Unix Epoch?

如何使用 java.sql 包中的 rs.getSQLXML() 函数从 Oracle 数据库中获取 XMLType 列?