SQL

Oracle Timestamp Interval

멋쟁이천재사자 2022. 10. 7. 15:14

1. DATE


sysdate 은 DATE 형입니다.

create table test_date as 
select 
sysdate as today
from dual;

test_date 의 레이아웃을 보면 today 칼럼이 DATE 형임을 확인할 수 있습니다.

2. TIMESTAMP

 

TIMESTAMP 는 DATE 형의 확장형입니다.

TIME ZONE 옵션에 따라 표현 방식이 미세하게 다른 몇 가지가 있습니다.
아래 스크립트를 통해 확인해볼 수 있습니다.

CREATE TABLE temp_time_table
  (COL1 TIMESTAMP,
   COL2 TIMESTAMP WITH TIME ZONE,
   COL3 TIMESTAMP WITH LOCAL TIME ZONE);

INSERT INTO temp_time_table
VALUES(SYSDATE, SYSDATE, SYSDATE);

SELECT * FROM temp_time_table ;

drop table temp_time_table;
   

 

3. INTERVAL DAY(9) TO SECOND(6)


일,시,분,초를 사용하여 두 날짜 사이의 기간을 저장하기 위한 데이터형입니다.

CREATE TABLE temp_time_table
  (start_time TIMESTAMP,
   end_time TIMESTAMP);
   
-- 555초 소요된 케이스 등록   
INSERT INTO temp_time_table
VALUES(SYSDATE-555/24/60/60, SYSDATE);   

CREATE TABLE temp_time_interval as
SELECT  
start_time
,end_time
,end_time - start_time as interval_time
FROM temp_time_table ;


select * from temp_time_interval;

레이아웃에서 interval_time 의 칼럼형을 확인할 수 있습니다.

 

4. INTERVAL 칼럼에서 시분초만 확인하기

 

INTERVAL DAY(9) TO SECOND(6) 칼럼의 데이터에서 시분초만 00:00:00 패턴으로 뽑으려면 어떻게 할까요?
다른 여러가지 방법들이 있겠지만 substr 으로는 다음과 같이 할 수 있습니다.
초 이하 부분이 반올림이 아닌 절사 되는 개념이라 아주 미세하게 오차가 있다고 볼 수 있습니다.

select
substr(interval_time,12,8) as gap    -- 00:00:05 패턴만 뽑아내기 
,a.* from temp_time_interval a

 

 

5. 임시 테이블 drop 하고 정리할게요

 

drop table temp_time_interval;


 



reference

https://docs.oracle.com/database/121/SQLRF/sql_elements001.htm#SQLRF0021
https://www.oracletutorial.com/oracle-basics/oracle-interval/