如何将 Unix 纪元时间戳与 SQL 中的 DATE 进行比较?

Posted

技术标签:

【中文标题】如何将 Unix 纪元时间戳与 SQL 中的 DATE 进行比较?【英文标题】:How can I compare a Unix epoch timestamp with a DATE in SQL? 【发布时间】:2021-09-22 11:28:28 【问题描述】:

例如,我有一个 DATE data_type 列,其中有一个条目 14-DEC-20 (ig to_date('14-DEC-20','DD-MON- RR')) 和与此等效的纪元日期。我想检查 DATE 是否等于纪元,如果不是,则在日期中设置等效纪元日期。

我尝试过 from_unixtime 或使用 CAST,但没有成功。

【问题讨论】:

【参考方案1】:

您可以使用以下方法将纪元时间转换为 Oracle 中的日期:

date '1970-01-01' + <your epoch value> * interval '1' second

然后您可以将其用作比较:

where datecol = date '1970-01-01' + <your epoch value> * interval '1' second

注意:这是在 second 级别进行比较。如果您希望它在 day 级别,则需要进行调整。您可以为此使用date

where datecol = date '1970-01-01' + floor(<your epoch value> / (24 * 60 * 60)) * interval '1' day

【讨论】:

这似乎无法正常工作,我不明白为什么。我的纪元时间是 1626167479458,实际上是: GMT: Tuesday, 13 July 2021 。但是在我转换它之后,我得到了 13-MAR-65。 select (date '1970-01-01' + floor( 1626167479458 / (24 * 60 * 60)) * interval '1' day) FROM DUAL; 更改计算实际上解决了我的问题,谢谢select (date '1970-01-01' + floor( 1626167479458 / ( 24 * 60 * 60 * 1000)) * interval '1' day) FROM DUAL; @Sir.Hedgehog 。 . .正式(例如en.wikipedia.org/wiki/Unix_time)Unix 时间是自 1970-01-01 以来的秒数。但是,正如您现在所遇到的,有时它指的是毫秒数。术语含糊不清。

以上是关于如何将 Unix 纪元时间戳与 SQL 中的 DATE 进行比较?的主要内容,如果未能解决你的问题,请参考以下文章

使用 sql 将字符串纪元代码从 unix 时间戳转换为日期

如何使用 Java 将 unix 纪元的列转换为 Apache spark DataFrame 中的日期?

Unity中实现时间戳与C#时间互转

Unity中实现时间戳与C#时间互转

如何在 C 中将 10131520 转换为 Unix 纪元时间?

如何从 Oracle 日期获取 unix 纪元?