programing

오라클 시스템 스탬프(날짜 변경) - 밀리초

goodsources 2023. 7. 20. 21:54
반응형

오라클 시스템 스탬프(날짜 변경) - 밀리초

최신 정보를 얻기 위해 저장된 기능의 구현을 제공할 수 있습니까?systimestamp밀리초 단위로
내가 사용할 수 있는 것.

select current_time_ms from dual;

그리고 현재 시간과 1970년 1월 1일 자정 UTC 사이의 차이를 밀리초 단위로 측정합니다.

감사해요.

  • 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;

제가 아는 가장 좋은 것은:

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;

저는 당신이 시간대와 관련하여 어떤 요구 사항을 가지고 있는지 잘 모르겠습니다.당신은 그것에 대해 약간의 조정이 필요할 수도 있습니다.

@Mykhaylo Adamovich 답변에 추가(정확해 보입니다!)여기서는 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

AFAIK, 수동으로 장황한 SQL 함수를 작성하는 것 외에 이를 달성할 수 있는 직접적인 방법이 없습니다.

특별히 이것이 필요한 이유가 무엇입니까?

저장된 Java 함수를 사용한 다음 Java에서 제공하는 System.getCurrentMillis()를 사용하여 1.1.1970년부터 현재까지 밀리초 단위의 값을 반환할 수 있습니다.

아래 코드는 차이를 밀리초 단위로 나타냅니다.

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

저는 타임스탬프를 나노초로, 나노초를 타임스탬프로 변환하는 몇 가지 방법을 여기에 게시했습니다.이러한 방법은 시간대의 영향을 받지 않으며 나노초의 정밀도를 갖습니다.

나노초가 아니라 밀리초가 되도록 조정하면 됩니다.

SELECT (EXTRACT(DAY FROM (
    SYSTIMESTAMP --Replace line with desired timestamp --Maximum value: TIMESTAMP '3871-04-29 10:39:59.999999999 UTC'
- TIMESTAMP '1970-01-01 00:00:00 UTC') * 24 * 60) * 60 + EXTRACT(SECOND FROM
    SYSTIMESTAMP --Replace line with desired timestamp
)) *  1000 AS MILLIS FROM DUAL;

MILLIS
1598434427263.027

언급URL : https://stackoverflow.com/questions/7147982/oracle-systimestamp-sysdate-to-milliseconds

반응형