※ 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
=> 시간만 구하기 때문에 일자는 의미가 없음
[출처] TIMESTAMP 밀리세컨드 시간 계산하기|작성자 큐피트
'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 |