gpt4 book ai didi

Oracle 相当于 java System.currentTimeMillis()?

转载 作者:行者123 更新时间:2023-12-04 00:59:32 26 4
gpt4 key购买 nike

我希望能够在 Oracle 数字字段中以毫秒为单位存储当前时间。我如何通过查询做到这一点?

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>

(我要感谢 Simon Nickerson,他在我的 PL/SQL 函数的先前版本中发现了导致异常结果的错字。)

顺便说一句,如果您只对最接近的厘米的时间感兴趣,Oracle 有一个内置的: DBMS_UTILITY.GET_TIME() .

关于Oracle 相当于 java System.currentTimeMillis()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2824710/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com