我需要复制linux命令" date +%s%3N"在SQL Developer中。我尝试了下面的代码示例,但它返回不同的值。我也做了广泛的搜索谷歌没有运气。
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;
日期+%s%3N命令返回类似于:
的内容1475615656692870653
上面的代码示例返回类似于:
的内容1475594089419116
即使在代码示例之前运行,date命令也会返回比代码示例更长且更大的数字。如果可能,最终解决方案将是Oracle中的直接实用程序。如果没有,可能在Oracle中调用date命令会起作用。
答案 0 :(得分:0)
试试这个:
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;
答案 1 :(得分:0)
我最后通过此链接http://www.orafaq.com/scripts/plsql/oscmd.txt中描述的方法使用oscommands。下面的解决方案是朝着正确方向迈出的一步,但是,我们制作的脚本的其他部分都遇到了问题。使用oscommands解决了我们所有的问题。使用链接中提到的方法,我只需输入
即可l_time := oscomm('/bin/date +%s%3N');
获取正确的号码。