如何将 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 中的日期?