카테고리 없음

오라클 SQL - 날짜 타입과 Time Zone

해피밀세트 2020. 2. 12. 19:30
반응형

 

1. 날짜 타입과 날짜 함수

 

1) 날짜 타입

  • sysdate : date타입의 형식(yyyy-mm-dd)으로 리턴 /
               
    시분초도 포함하고 있지만 보여지는건 년월일 /
               
    이하 5자리까지 표현함
  • timestamp : 이하 9자리까지 표현(timestamp(9)) / 기본값은 6자리
  • timestamp with time zone : timestamp타입과 현재 지역 정보까지 보여줌
  • timestamp with local time zone  : 보는 지역에 따라 입력한 날짜,시간 정보가 자동으로 변환
  • interval : 기간을 명시하는 날짜타입

 

2) 날짜 함수

  • sysdate : date타입의 형식으로 server시간 출력
  • current_date : date타입의 형식으로 client시간 출력
  • systimestamp : server 시간(timestamp 타입) + sever time zone
  • current_timestamp : client 시간(timestamp 타입) + client time zone
  • localtimestamp : timestamp 타입 / client 시간대로 들어왔을때 자동으로 sever시간대로 환산

 

2-1) 날짜 함수 연습

# 테스트 테이블을 만든다.

create table time_test
(a date,
b timestamp(9),
c timestamp with time zone,
d timestamp with local time zone);

 

# 날짜 출력하기

select sysdate, systimestamp, -----------------------------------> server 시간
        current_date, current_timestamp, localtimestamp ------> client 시간 / session의 시간
from dual;

 

3) 기간 함수

create table interval_test
(e interval year(3) to month, -------------> 연수과 월수로 표현
f interval day(3) to second); --------------> 일수와 시분초까지 표현

 

insert into interval_test(e,f)
values(to_yminterval('10-00'),to_dsinterval('100 10:00:00'));
select * from interval_test;

 

insert into interval_test(e,f)
values('1-11','50 00:00:00');
select * from interval_test;

 


 

2. Time Zone

 

1) Time Zone 알아보기

# time zone 지역을 전부 보기 : 

select * from v$timezone_names;

# time zone 지역에 따라 시간을 보기 :

select tz_offset('Asia/seoul') from dual;

 

2) Time Zone을 바꿔서 날짜 확인

# time zone 바꾸기 :

alter session set time_zone = '+08:00';

 

# 바뀐 time zone에서의 날짜 확인 :

select sysdate, systimestamp,
         current_date, current_timestamp, localtimestamp
from dual;

 

2-1) 연습

drop table time_test purge;
create table time_test
(a date,
b timestamp(9),
c timestamp with time zone,
d timestamp with local time zone);

 

insert into time_test(a,b,c,d)
values(current_date, localtimestamp, current_timestamp, localtimestamp);
commit;

 

select * from time_test;

타임존을 +08:00 ,-05:00, +10:00 바꿨을때

 


 

3. 시간 데이터 타입 변환하기

 

  • char -> date : 문자 타입에서 날짜 타입으로 변환

select to_date('2020-02-12 14:46:00', 'yyyy-mm-dd hh24:mi:ss') 
from dual;

 

  • char -> timestamp : 문자 타입에서 timestamp 타입으로 변환

select to_timestamp('2020-02-12 14:46:00', 'yyyy-mm-dd hh24:mi:ss.ff') 
from dual;

 

  • char -> timestamp with time zone : 문자 타입에서 timestamp with time zone 타입으로 변환

 

select to_timestamp_tz('2020-02-12 14:46:00 +09:00', 'yyyy-mm-dd hh24:mi:ss.ff tzh:tzm') 
from dual;

+09:00부분에 Asia/seoul 의 형식으로는 사용 불가능.

 

  • char -> interval year to month : 문자 타입에서 interval year to month 타입으로 변환

select sysdate + to_yminterval('10-00') ---------> to_yminterval('연수-월수')
from dual;

select sysdate + to_yminterval('2-1')
from dual

 

  • char -> interval day to second : 문자 타입에서 interval day to second 타입으로 변환

select localtimestamp + to_dsinterval('100 10:00:00')
from dual;

 

 


 

4. Extract문으로 시간 출력

 

select extract(year from sysdate) from dual; ------------------> sever의 연

select extract(month from sysdate) from dual; ---------------> sever 

select extract(day from sysdate) from dual; ------------------> sever 

select extract(hour from localtimestamp) from dual; --------> client의

select extract(minute from localtimestamp) from dual; ------> client의

select extract(second from localtimestamp) from dual; ------> client의

select extract(timezone_hour from systimestamp) from dual; --------------> time zone의 시간 (+09:00이면 9)

select extract(timezone_minute from systimestamp) from dual; -----------> time zone의 분

select extract(timezone_region from current_timestamp) from dual; ------> time zone 지역의 이름

select extract(timezone_abbr from current_timestamp) from dual; --------> time zone 지역의 약어

 

만약 time zone 이름 부분이 UKNOWN으로 나오면

alter session set time_zone = 'Asia/seoul';

이렇게 바꿔야함.

반응형