我希望能够以毫秒为单位在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