sql - 在 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)。
解决方案
这个值似乎是 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')
推荐阅读
- operating-system - XV6中的fork(),子进程是在内核模式还是用户模式下执行?
- javascript - 警告:失败的道具类型道具“onPress”在“按钮”中标记为必需,但其值为“未定义”
- serverless - Openwhisk:分布式设置的扩展问题
- css - 使用速记时取消设置 CSS 关键字不起作用
- java - Android - 提醒通知问题
- java - Neo4j SET 错误 - 未定义变量
- java - org.openqa.selenium.WebDriverException:无法使用 Selenium 和 ChromeDriver 访问 chrome
- r - foreach %dopar% 写入同一个文件
- bash - 后台进程与子shell的 SIGINT 传播
- signtool - Signtool SignerSign() 错误 (-1073700864/0xc000a000)