programing

java System.currentTimeMillis()에 해당하는 Oracle?

i4 2023. 7. 30. 17:03
반응형

java System.currentTimeMillis()에 해당하는 Oracle?

Oracle 번호 필드에 현재 시간을 밀리초 단위로 저장할 수 있기를 원합니다.쿼리를 통해 이 작업을 수행하려면 어떻게 해야 합니까?

select systimestamp from dual; 

실제 타임스탬프를 반환합니다.자바와 같은 방식으로 이것을 밀리초로 변환할 수 있는 방법이 있습니까?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 Stored Procedure를 만드는 것이 더 간단할 수 있습니다.

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 함수에서 비정상적인 결과를 초래한 오타를 발견한 Simon Nickerson에게 감사드립니다.)


덧붙여서, 100초에 가까운 시간에만 관심이 있다면 Oracle에는 DBMS_UTILITY라는 기본 제공 기능이 있습니다.GET_TIME().

이 링크는 Oracle용 currentmillis.com 의 모든 언어에 도움이 됩니다.

SELECT (SYSDATE - TO_DATE('01-01-1970 00:00:00', 'DD-MM-YYYY HH24:MI:SS')) * 24 * 60 * 60 * 1000 FROM DUAL
  • DB 표준 시간대 제한 없음
  • 밀리초 단위로
  • XE에서의 작업
함수 current_time_ms반송 번호이라out_결과 번호;시작한다.extract 선택(day from(sys_extract_utc(시스템스탬프)) - to_timestamp('1970-01-01', 'YYY-MM-DD')) * 86400000to_number(to_char(sys_extract_utc(시스템 스탬프)), 'SSSSSSFF3')결과적으로이중에서;결과를 반환합니다.종료 current_time_ms;

사용해 보십시오.

추출 선택(day from(sys_extract_utc(타임존 'GMT'의 시스템 스탬프) - to_timestamp('1970-01-01', 'YYY-MM-DD')) * 86400000 + to_number(to_char(sys_extract_ut')), 'SSFS3'(듀얼)

언급URL : https://stackoverflow.com/questions/2824710/oracle-equaivalent-of-java-system-currenttimemillis

반응형