我希望能夠以毫秒爲單位在Oracle編號字段中存儲當前時間。我如何通過查詢做到這一點?甲骨文Equalvalent的Java System.currentTimeMillis()?
select systimestamp from dual;
返回實際的時間戳。無論如何,我可以像Java的System.currentTimeMillis()
一樣將它轉換成毫秒數?
我希望能夠以毫秒爲單位在Oracle編號字段中存儲當前時間。我如何通過查詢做到這一點?甲骨文Equalvalent的Java System.currentTimeMillis()?
select systimestamp from dual;
返回實際的時間戳。無論如何,我可以像Java的System.currentTimeMillis()
一樣將它轉換成毫秒數?
的Java函數返回,因爲在一段固定的時刻已經過去的毫秒數。那個時間是1970年UTC的第一天午夜,即Unix時鐘時間的開始。
下面的函數爲PL/SQL相同。它從起始點(其中ms = 1)中減去當前時間戳。它提取各種時間分量並將其轉換爲秒。最後,由1000乘以一切辦法去以毫秒爲單位的值:
create or replace function current_millisecs
return number
is
base_point constant timestamp := to_timestamp('01-JAN-1970 00:00:00.000');
now constant timestamp := systimestamp AT TIME ZONE 'UTC' ;
begin
return (
((extract(day from (now-base_point)))*86400)
+ ((extract(hour from (now-base_point)))*3600)
+ ((extract(minute from (now-base_point)))*60)
+ ((extract(second from (now-base_point))))
) * 1000;
end;
/
如果在數據庫中啓用了Java,你可能會發現它更簡單的創建一個Java存儲過程,而不是:的
create or replace function currentTimeMillis return number as
language java name 'java.lang.System.currentTimeMillis() return java.lang.Integer';
/
比較這兩種方法:
SQL> select currentTimeMillis as JAVA
2 , current_millisecs as PLSQL
3 , currentTimeMillis - current_millisecs as DIFF
4 from dual
5/
JAVA PLSQL DIFF
---------- ---------- ----------
1.2738E+12 1.2738E+12 0
SQL>
(我要感謝西蒙·尼克森,誰在我的PL/SQL函數的前一版本相比產生了反常的結果發現錯字。 )
順便說一句,如果你只在時間到最近的百分之一秒興趣,Oracle有一個內置的是:DBMS_UTILITY.GET_TIME()。
function current_time_ms return number is out_result number; begin select extract(day from(sys_extract_utc(systimestamp) - to_timestamp('1970-01-01', 'YYYY-MM-DD'))) * 86400000 + to_number(to_char(sys_extract_utc(systimestamp), 'SSSSSFF3')) into out_result from dual; return out_result; end current_time_ms;
這個鏈接可以幫助所有語言 currentmillis.com 對於Oracle:
SELECT (SYSDATE - TO_DATE('01-01-1970 00:00:00', 'DD-MM-YYYY HH24:MI:SS')) * 24 * 60 * 60 * 1000 FROM DUAL
不正確的答案,因爲它沒有考慮當前時區考慮在內。 – 2017-03-13 23:48:22
當前時區在SYSDATE中考慮在內。它工作正常 – Milad 2017-03-14 09:34:43
彼此的幾秒鐘內:當前時間米利斯按https://currenttimemillis.com:1489491379553個 當前時間米利斯按照上面的方法:1489529163000 差異:37891447 – 2017-03-14 11:37:24
一些這裏有用的建議:http://www.dba-oracle.com/t_timestamp_math_elapsed_times.htm – 2010-05-13 06:32:27