貴國是否能實現存儲功能來獲取當前systimestamp
爲毫秒。
東西我可以像使用甲骨文SYSTIMESTAMP(SYSDATE),以毫秒爲單位
select current_time_ms from dual;
,並獲得差異,以毫秒爲單位,當前時間和午夜,1970年1月,UTC之間。
謝謝。
貴國是否能實現存儲功能來獲取當前systimestamp
爲毫秒。
東西我可以像使用甲骨文SYSTIMESTAMP(SYSDATE),以毫秒爲單位
select current_time_ms from dual;
,並獲得差異,以毫秒爲單位,當前時間和午夜,1970年1月,UTC之間。
謝謝。
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;
如果會話時區恰好是從系統的不同,這可以通過24小時當午夜稱爲(取決於兩個時區如何關聯前後)的返回值了。您可以使用'ALTER SESSION SET TIME_ZONE ='+ 08:00''或類似的方法輕鬆測試。修復看起來很簡單:在表達式中用(sys_extract_utc(systimestamp)...)替換'from(systimestamp ...''''。 –
修復了,謝謝。 –
我寫了「純Java」版本(請參閱我的答案)。令我驚訝的是,在非常簡單的測試中,Java版本比PL/SQL更快。 –
我知道的最好的事情是:
select extract(day from (systimestamp - timestamp '1970-01-01 00:00:00')) * 86400000
+ extract(hour from (systimestamp - timestamp '1970-01-01 00:00:00')) * 3600000
+ extract(minute from (systimestamp - timestamp '1970-01-01 00:00:00')) * 60000
+ extract(second from (systimestamp - timestamp '1970-01-01 00:00:00')) * 1000 unix_time
from dual;
我不太清楚你對什麼要求時區。您可能需要對此進行微調。
Tt沒有考慮到閏年。 –
它是精確到秒,不毫秒 –
下面代碼給出以毫秒爲單位的區別:
with t as (select systimestamp - to_timestamp(sysdate) diff from dual)
select extract(day from diff) * 24 * 3600000+
extract(hour from diff) * 3600000+
extract(minute from diff) * 60000 +
extract(second from diff) * 1000
dif
from t
對於毫秒的轉換時間,分鐘,秒,修改並使用下面的查詢酌情:(!這看起來是正確的)
with t as (select systimestamp - to_timestamp(sysdate) diff from dual)
select extract(day from diff) * 24 * 3600000+
extract(hour from diff) * 3600000+
extract(minute from diff) * 60000 +
extract(second from diff) * 1000
dif,
(to_char (to_date(round((extract(day from diff) * 24 * 3600000+
extract(hour from diff) * 3600000+
extract(minute from diff) * 60000 +
extract(second from diff) * 1000)/1000), 'SSSSS'), 'HH24"Hrs" MI"Min" SS"Sec"')) timeval
from t
添加到@Mykhaylo Adamovych答案在這裏不用使用Oracle的Java支持一個更簡單的方法(即不在XE中,不在AWS RDS中)。便攜性較差(如果您在意),但在我的測試中似乎更快。
CREATE or replace FUNCTION current_java_timestamp RETURN number
AS LANGUAGE JAVA NAME 'java.lang.System.currentTimeMillis() return java.lang.Long';
/
SELECT to_char(sysdate, 'HH24:MI:SS'), to_char(systimestamp, 'HH24:MI:SS.FF6') FROM dual
看http://stackoverflow.com/questions/5881235/oracle-current-timestamp-to-seconds-conversion。答案越來越短。 – Vadzim