[SQL] 오라클에서 밀리 초에 타임 스탬프 사이의 차이
SQL오라클에서 밀리 초에 타임 스탬프 사이의 차이
나는 테이블 TEST1을 아래와 같이 timestamp 데이터 유형은 몇 가지 기록을 갖는 하나 개의 컬럼 법무부가 있습니다. 여기서 I는 사법부와 SYSTIMESTAMP 차분 IM 밀리 초 필요하다.
SELECT DOJ FROM TEST1;
DOJ
----------------------------
21-MAR-14 09.25.34.514526000
21-MAR-14 09.25.34.520345000
22-MAR-14 09.25.34.523144000
22-MAR-14 09.25.34.527770000
23-MAR-14 09.25.34.532482000
23-MAR-14 09.25.34.535603000
24-MAR-14 09.25.34.538556000
24-MAR-14 09.25.34.541729000
SELECT SYSTIMESTAMP FROM DUAL;
SYSTIMESTAMP
--------------
24-MAR-14 09.48.10.251556000 +00:00
어떤 사람이 함께 도움을 나를 기쁘게 할 수 있습니다.
해결법
-
==============================
1.
select extract(second from systimestamp - doj) * 1000 from test1;
-
==============================
2.그런 다음 전체 밀리 초를 원하는 경우에 당신이 추출하고 서로 하나의 타임 스탬프를 빼서 생산 년대 간격에서 모든 요소를 결합해야 르네의 대답은 조금 확장 :
그런 다음 전체 밀리 초를 원하는 경우에 당신이 추출하고 서로 하나의 타임 스탬프를 빼서 생산 년대 간격에서 모든 요소를 결합해야 르네의 대답은 조금 확장 :
select doj, systimestamp - doj, trunc(1000 * (extract(second from systimestamp - doj) + 60 * (extract(minute from systimestamp - doj) + 60 * (extract(hour from systimestamp - doj) + 24 * (extract(day from systimestamp - doj) ))))) as milliseconds from test1; DOJ SYSTIMESTAMP-DOJ MILLISECONDS ---------------------------- ---------------- ---------------- 21-MAR-14 09.25.34.514526000 3 2:9:8.785713 266948785 21-MAR-14 09.25.34.520345000 3 2:9:8.779894 266948779 22-MAR-14 09.25.34.523144000 2 2:9:8.777095 180548777 22-MAR-14 09.25.34.527770000 2 2:9:8.772469 180548772 23-MAR-14 09.25.34.532482000 1 2:9:8.767757 94148767 23-MAR-14 09.25.34.535603000 1 2:9:8.764636 94148764 24-MAR-14 09.25.34.538556000 0 2:9:8.761683 7748761 24-MAR-14 09.25.34.541729000 0 2:9:8.75851 7748758
SQL 바이올린, 당신은 당신의 서버 시간대 것을 조정해야 할 것입니다하지만, 비교를 위해 유닉스 시대 날짜를 포함.
-
==============================
3.당신이 다음 윤초를 처리해야하는 경우이에 대한 계정에 신기원 시간을 조정하는 유틸리티 패키지를 만들 수 있습니다 :
당신이 다음 윤초를 처리해야하는 경우이에 대한 계정에 신기원 시간을 조정하는 유틸리티 패키지를 만들 수 있습니다 :
CREATE OR REPLACE PACKAGE time_utils IS FUNCTION milliseconds_since_epoch( in_datetime IN TIMESTAMP, in_epoch IN TIMESTAMP DEFAULT TIMESTAMP '1970-01-01 00:00:00' ) RETURN NUMBER; FUNCTION milliseconds_epoch_to_ts ( in_milliseconds IN NUMBER, in_epoch IN TIMESTAMP DEFAULT TIMESTAMP '1970-01-01 00:00:00' ) RETURN TIMESTAMP; END; / SHOW ERRORS; CREATE OR REPLACE PACKAGE BODY time_utils IS -- List of the seconds immediately following leap seconds: leap_seconds CONSTANT SYS.ODCIDATELIST := SYS.ODCIDATELIST( DATE '1972-07-01', DATE '1973-01-01', DATE '1974-01-01', DATE '1975-01-01', DATE '1976-01-01', DATE '1977-01-01', DATE '1978-01-01', DATE '1979-01-01', DATE '1980-01-01', DATE '1981-07-01', DATE '1982-07-01', DATE '1983-07-01', DATE '1985-07-01', DATE '1988-01-01', DATE '1990-01-01', DATE '1991-01-01', DATE '1992-07-01', DATE '1993-07-01', DATE '1994-07-01', DATE '1996-01-01', DATE '1997-07-01', DATE '1999-01-01', DATE '2006-01-01', DATE '2009-01-01', DATE '2012-07-01', DATE '2015-07-01', DATE '2016-01-01' ); HOURS_PER_DAY CONSTANT BINARY_INTEGER := 24; MINUTES_PER_HOUR CONSTANT BINARY_INTEGER := 60; SECONDS_PER_MINUTE CONSTANT BINARY_INTEGER := 60; MILLISECONDS_PER_SECOND CONSTANT BINARY_INTEGER := 1000; MINUTES_PER_DAY CONSTANT BINARY_INTEGER := HOURS_PER_DAY * MINUTES_PER_HOUR; SECONDS_PER_DAY CONSTANT BINARY_INTEGER := MINUTES_PER_DAY * SECONDS_PER_MINUTE; MILLISECONDS_PER_MINUTE CONSTANT BINARY_INTEGER := SECONDS_PER_MINUTE * MILLISECONDS_PER_SECOND; MILLISECONDS_PER_HOUR CONSTANT BINARY_INTEGER := MINUTES_PER_HOUR * MILLISECONDS_PER_MINUTE; MILLISECONDS_PER_DAY CONSTANT BINARY_INTEGER := HOURS_PER_DAY * MILLISECONDS_PER_HOUR; FUNCTION milliseconds_since_epoch( in_datetime IN TIMESTAMP, in_epoch IN TIMESTAMP DEFAULT TIMESTAMP '1970-01-01 00:00:00' ) RETURN NUMBER IS p_leap_milliseconds BINARY_INTEGER := 0; p_diff INTERVAL DAY(9) TO SECOND(3); BEGIN IF in_datetime IS NULL OR in_epoch IS NULL THEN RETURN NULL; END IF; p_diff := in_datetime - in_epoch; IF in_datetime >= in_epoch THEN FOR i IN 1 .. leap_seconds.COUNT LOOP EXIT WHEN in_datetime < leap_seconds(i); IF in_epoch < leap_seconds(i) THEN p_leap_milliseconds := p_leap_milliseconds + MILLISECONDS_PER_SECOND; END IF; END LOOP; ELSE FOR i IN REVERSE 1 .. leap_seconds.COUNT LOOP EXIT WHEN in_datetime > leap_seconds(i); IF in_epoch > leap_seconds(i) THEN p_leap_milliseconds := p_leap_milliseconds - MILLISECONDS_PER_SECOND; END IF; END LOOP; END IF; RETURN MILLISECONDS_PER_SECOND * EXTRACT( SECOND FROM p_diff ) + MILLISECONDS_PER_MINUTE * EXTRACT( MINUTE FROM p_diff ) + MILLISECONDS_PER_HOUR * EXTRACT( HOUR FROM p_diff ) + MILLISECONDS_PER_DAY * EXTRACT( DAY FROM p_diff ) + p_leap_milliseconds; END milliseconds_since_epoch; FUNCTION milliseconds_epoch_to_ts( in_milliseconds IN NUMBER, in_epoch IN TIMESTAMP DEFAULT TIMESTAMP '1970-01-01 00:00:00' ) RETURN TIMESTAMP IS p_datetime TIMESTAMP; BEGIN IF in_milliseconds IS NULL OR in_epoch IS NULL THEN RETURN NULL; END IF; p_datetime := in_epoch + NUMTODSINTERVAL( in_milliseconds / MILLISECONDS_PER_SECOND, 'SECOND' ); IF p_datetime >= in_epoch THEN FOR i IN 1 .. leap_seconds.COUNT LOOP EXIT WHEN p_datetime < leap_seconds(i); IF in_epoch < leap_seconds(i) THEN p_datetime := p_datetime - INTERVAL '1' SECOND; END IF; END LOOP; ELSE FOR i IN REVERSE 1 .. leap_seconds.COUNT LOOP EXIT WHEN p_datetime > leap_seconds(i); IF in_epoch > leap_seconds(i) THEN p_datetime := p_datetime + INTERVAL '1' SECOND; END IF; END LOOP; END IF; RETURN p_datetime; END milliseconds_epoch_to_ts; END; / SHOW ERRORS;
그럼 당신은 할 수 있습니다 :
SELECT TIME_UTILS.MILLISECONDS_SINCE_EPOCH( in_datetime => TIMESTAMP '1974-01-01 00:00:00.000', in_epoch => TIMESTAMP '1973-12-31 23:59:59.999' ) AS diff FROM DUAL;
그리고 출력을 얻을 :
DIFF ---- 1001
참고 : 패키지를 최신 유지하기 위해 새로운 도약 - 초이 제안 할 때 필요합니다.
from https://stackoverflow.com/questions/22606161/difference-between-timestamps-in-milliseconds-in-oracle by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 부동 소수점으로 값을 캐스팅 할 수 없습니다 (0) | 2020.05.29 |
---|---|
[SQL] 맞춤법의 차이와 유사한 단어를 인식하는 방법 (0) | 2020.05.29 |
[SQL] H2 데이터베이스 열 이름 "그룹은"예약 된 단어입니다 (0) | 2020.05.29 |
[SQL] C #하는 SqlCommand - 어떻게 해결에 열 이름에 대한 매개 변수를 사용할 수없는 이유는 무엇입니까? (0) | 2020.05.29 |
[SQL] T-SQL은 : 이메일 형식 검사 (0) | 2020.05.29 |