Oracle中LONG到Timestamp的转换



我有一个数据源,它是在长整数格式发送时间戳数据,我们必须在Oracle转换成时间戳。我可以很容易地在JAVA中做到。然而,我不确定如何在ORACLE中实现这一点。TO_TIMESTAMP给出无效月份错误。

Sample data - 1636070400000
<<p>Java片段/strong>
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);
}
}

上面的代码片段返回- 20121-11-05 00:00:00.0

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

这个值似乎是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;

您也可以使用NUMTODSINTERVAL(1636070400000/1000, 'second')

代替INTERVAL文字。

最新更新