我需要在 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/