首页 > 解决方案 > 在 Oracle 中将 LONG 转换为时间戳

问题描述

我有一个数据源以 LONG 整数格式发送 TIMESTAMP 数据,我们必须将其转换为 Oracle 中的 TIMESTAMP。我可以很容易地在 JAVA 中做到这一点。但是,我不确定如何在 ORACLE 中实现这一点。TO_TIMESTAMP 给出了无效的月份错误。

Sample data - 1636070400000

Java 片段

import java.sql.Timestamp;

public class MyClass {
    public static void main(String args[]) {
      long timeStamp = 1636070400000L;
        Timestamp stamp = new Timestamp(timeStamp);
      System.out.println("Timestamp is "+stamp);
    }
}

以上片段返回 - 2021-11-05 00:00:00.0

我希望在 SQL 中以类似格式输出以进一步操作数据(YYYY-MM-DD HH24:MI:SS)。

标签: sqloracletimestamp

解决方案


这个值似乎是 Java/Javascript 时间戳,即从 1970-01-01 开始的毫秒数。试试这个:

SELECT TIMESTAMP '1970-01-01 00:00:00 UTC' + 1636070400000/1000 * INTERVAL '1' SECOND
FROM dual;

它返回 UTC 时间。如果您想获取当地时间,请使用

SELECT (TIMESTAMP '1970-01-01 00:00:00 UTC' + 1636070400000/1000 * INTERVAL '1' SECOND) AT LOCAL
FROM dual;

或者

SELECT (TIMESTAMP '1970-01-01 00:00:00 UTC' + 1636070400000/1000 * INTERVAL '1' SECOND) AT 'Europe/Zurich'
FROM dual;

除了INTERVAL文字,您还可以使用NUMTODSINTERVAL(1636070400000/1000, 'second')


推荐阅读