DS's『 행복합시다 』

Carpe Programming/oracle

[oracle] TIMESTAMP 밀리세컨드 시간 계산하기

nolite 2012. 1. 19. 10:48

Millisecond 시간을 구하기 위해서는 Timestamp 형식을 사용해야만 한다.

▷ 현재시간 TIMESTAMP 형식으로 구하기

SELECT SYSTIMESTAMP,

TO_CHAR(SYSTIMESTAMP, 'YYYYMMDDHH24MISSFF3'),

CURRENT_TIMESTAMP(3)

FROM DUAL

>> 결과 : 2010-09-09 오후 9:00:41.583261 +09:00

20100909210041583

2010-09-10 오전 11:00:41.583 +09:00

=> SYSTIMESTAMP 형식을 문자로 변형할때 'YYYYMMDDHH24MISSFF3' 문자열 포맷타입의 마지막 숫자 '3'은 밀리세컨드시간 자리수를 의미 (3 => 밀리세컨드 자리수를 3자리까지 구함)

테스트 결과 6자리까지는 시간이 변경되며 계산되어지나 7자리 부터는 '0'으로 자리수만 채워서 출력됨. CURRENT_TIMESTAMP(3) 의 숫자또한 같은 의미임.

위 결과를 보면 CURRENT_TIMESTAMP 는 시스템 시간이 아님...

SYSTIMESTAMP 및 CURRENT_TIMESTAMP 함수의 반환 타입은 TIMESTAMP WITH TIME ZONE 타입임... CURRENT_TIMESTAMP 함수는 현재 세션의 시간대를 기준으로 한 현재 날짜를 반환함.

SELECT DBTIMEZONE FROM DUAL;

>> 결과 : +00:00

SELECT SESSIONTIMEZONE FROM DUAL;

>> 결과 : +09:00 => 우리나라는 GMT 시간보다 9시간이 빠름

문자열을 TIMESTAMP 형식 변환하기

SELECT TO_TIMESTAMP('2010010813324012', 'YYYYMMDDHH24MISSFF2') FROM DUAL

>> 결과 : 2010-01-08 오전1:32:40.120000000


시간, 분, 초, 밀리초 까지만 구하기

SELECT TO_CHAR(SYSTIMESTAMP, 'HH24MISSFF3') FROM DUAL

>> 결과 : 085722084 => 08:57:22.084

시간 차이 구하기 - 1

SELECT SYSTIMESTAMP(3) -

TO_TIMESTAMP('20100908133240123', 'YYYYMMDDHH24MISSFF3')

FROM DUAL

>> 결과 : +00 19:39:19.313000

=> +00 (일자 차이, 현재시간이 빼주려는 시간보다 이전이면 '-', 이후이면 '+'),

나머지는 시간차이.

위와 같이 구하면 정확한 시간이 나오지 않는다. 아무래도 세션의 시간대를 기준으로

계산해서 그런거 같은데 현재시간대를 기준으로 구하려면 아래와 같이 하면 된다.

SELECT TO_TIMESTAMP(TO_CHAR(SYSTIMESTAMP, 'YYYYMMDDHH24MISSFF3'),

'YYYYMMDDHH24MISSFF3') -

TO_TIMESTAMP('20100908133240123', 'YYYYMMDDHH24MISSFF3')

FROM DUAL

=> TIMESTAMP 타입을 문자열로 변환후 다시 TIMESTAMP 형식으로 변환하여

계산하면 정상적으로 계산됨... 왜 그런지는 아직 잘 모르겠음...

시간 차이 구하기 - 2 (시분초,밀리초(3자리) 문자열로 구하기)

SELECT REPLACE(REPLACE(SUBSTR(SYSTIMESTAMP(3) -

TO_TIMESTAMP(TO_CHAR(SYSDATE, 'YYYYMMDD') || '093906329', 'YYYYMMDDHH24MISSFF3'), 12, 12),

':', ''), '.', '')

FROM DUAL

>> 결과 : 004551328

=> 시간만 구하기 때문에 일자는 의미가 없음

728x90

'Carpe Programming > oracle' 카테고리의 다른 글

[오라클] 파티셔닝 샘플  (0) 2012.01.25
오라클 정규식  (0) 2012.01.19
[oracle] 파티셔닝  (0) 2012.01.19
[oracle] 전체 최대 최소 값 조회  (0) 2011.12.20
[oracle] alter sql  (0) 2011.12.02