2017-09-15 48 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

顯然只有幾微秒。 –