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';
이렇게 바꿔야함.