2017-09-15 63 views
2

在oracle中是否有与java的“System.nanoTime()”等价的东西? 在java System.nanoTime()返回类似“246193102011083”。甲骨文等效于java的System.nanoTime()

+1

相关:https://stackoverflow.com/questions/2824710/oracle-equaivalent-of-java-system-currenttimemillis – 2017-09-15 09:49:49

+1

你也许可以使用https://stackoverflow.com/a/2826515/180100和https://stackoverflow.com/a/5318211/180100 – 2017-09-15 09:52:31

+0

这是否意味着它不可能? – TomJava

回答

2

您可以使用:

SELECT SYSTIMESTAMP(9) FROM DUAL; 

注 - 测试在Solaris盒子我只能看到微秒精度;时间戳的最后3位总是显示为000。在Windows中,我只能看到毫秒精度,因此您获得的准确性可能取决于操作系统(或其他因素)。

如果你想把它当作纳米秒内从一个时代(例如1970-01-01),则:

SELECT EXTRACT(DAY FROM time) * 24 * 60 * 60 * 1e9 
     + EXTRACT(HOUR FROM time)  * 60 * 60 * 1e9 
     + EXTRACT(MINUTE FROM time)   * 60 * 1e9 
     + EXTRACT(SECOND FROM time)    * 1e9 AS nanotime 
FROM (SELECT SYSTIMESTAMP(9) - TIMESTAMP '1970-01-01 00:00:00 UTC' AS time FROM DUAL); 

您还可以使用:

CREATE FUNCTION nanotime RETURN NUMBER 
    AS LANGUAGE JAVA NAME 'java.lang.System.nanoTime() return long'; 
/

SELECT nanotime() FROM DUAL; 

注 - 在Solaris和Windows在测试时都会显示出微秒级的精度。

+0

但每次我在最后看到三重零。这是否意味着它只有微秒的精度?例如:“1505470076941452000” – TomJava

+0

显然只有几微秒。 –