linux - 在 SQL Developer 中生成以毫秒为单位的总时间

标签 linux oracle time milliseconds

我需要在 SQL Developer 中复制 linux 命令“date +%s%3N”。我已经尝试了下面的代码示例,但它返回了不同的值。我也进行了广泛的谷歌搜索,但没有成功。

select to_char((extract(day from (systimestamp - timestamp '1970-01-01 00:00:00')) * 86400000
+ extract(hour from (systimestamp - timestamp '1970-01-01 00:00:00')) * 3600000
+ extract(minute from (systimestamp - timestamp '1970-01-01 00:00:00')) * 60000
+ extract(second from (systimestamp - timestamp '1970-01-01 00:00:00')) * 1000) * 1000) unix_time
from dual;

date +%s%3N 命令返回如下内容:

1475615656692870653

而上面的代码示例返回如下内容:

1475594089419116

date 命令返回比代码示例更长更大的数字,即使它在代码示例之前运行也是如此。如果可能的话,最终的解决方案是在 Oracle 中直接使用实用程序。如果没有,可能会在 Oracle 中调用 date 命令。

最佳答案

试试这个:

CREATE OR REPLACE FUNCTION GetUnixTime RETURN INTEGER IS
    dsInt INTERVAL DAY(9) TO SECOND;
    res NUMBER;
BEGIN

    dsInt := CURRENT_TIMESTAMP - TIMESTAMP '1970-01-01 00:00:00 UTC';
    res:= EXTRACT(DAY FROM dsInt)*24*60*60 
        + EXTRACT(HOUR FROM dsInt)*60*60 
        + EXTRACT(MINUTE FROM dsInt)*60 
        + EXTRACT(SECOND FROM dsInt);
    RETURN ROUND(1000*res);
END GetUnixTime;

ROUND(1000*res) 将以 Milli 秒为单位返回 Unix 时间,根据您的问题,不清楚您是否希望获得毫秒、微秒甚至纳秒.但是如何将结果更改为所需值是很明显的。

此函数会考虑您本地的时区和 Unix 纪元的时区(始终为 UTC)

如果你不喜欢某个函数,你当然可以在查询中编写它:

SELECT 
    ROUND(EXTRACT(DAY FROM CURRENT_TIMESTAMP - TIMESTAMP '1970-01-01 00:00:00 UTC')*24*60*60 
        + EXTRACT(HOUR FROM CURRENT_TIMESTAMP - TIMESTAMP '1970-01-01 00:00:00 UTC')*60*60 
        + EXTRACT(MINUTE FROM CURRENT_TIMESTAMP - TIMESTAMP '1970-01-01 00:00:00 UTC')*60 
        + EXTRACT(SECOND FROM CURRENT_TIMESTAMP - TIMESTAMP '1970-01-01 00:00:00 UTC') 
    * 1000) AS unix_time
FROM dual;

关于linux - 在 SQL Developer 中生成以毫秒为单位的总时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39861968/

相关文章:

mysql - lamp 和 mysql 的限制,性能?

java - 运行一个在 windows 和 Linux 平台上运行的 Java 开发的 web 项目

linux - --proof=* 意思是shellscript

go - 如何在 Go 中解析 ISO 8601 时间戳?

date - 如何创建每次调用时 *调用* %date% 或 %time% 的用户环境变量?

c# - 在 C# 中将时间转换为十进制

c - 排序内核linux链表

c# - Oracle 期望什么格式的日期?

c# - excel to oracle db 使用 VS 2005 C#

java - 使用docker文件在Oracle初始化期间初始化架构