본문 바로가기
{"CODING": undefind};/DataBase

11. ORACLE 날짜함수

by 잼잼미 2021. 2. 23.

단일행함수-3.날짜함수

DATE(날짜타입)

==> DATE 타입의 기본적인 표현방식은 'RR/MM/DD'으로 나타내어진다.

RR은 년도의 2자리만 나타내어주는데 50 ~ 99 은 1950 ~ 1999, 00 ~ 49 은 2000 ~ 2049 을 말하는 것이다.

MM은 월이고, DD는 일이다.

 

***현재시각을 알려주는 것

select sysdate, current_date, localtimestamp, current_timestamp, systimestamp

from dual;

-sysdate: 년/월/일

-currnet_date: 년/월/일

-localtimestamp: 년/월/일 시:분:초

-current_timestamp: 년/월/일 시:분:초 지역

-systimestamp: 년/월/일 시:분:초 표준시

 

*

날짜1 + 숫자 = 날짜2/ 날짜1에서 숫자(일수)만큼 더한 값은 날짜2이다.

날짜1 - 숫자 = 날짜2/ 날짜1에서 숫자(일수)만큼 뺀 값은 날짜2이다.

 

ex1)

select sysdate - 1, to_char(sysdate-1, 'yyyy-mm-dd hh24:mi:ss') as 어제시각,

sysdate, to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') as 현재시각,

sysdate + 1, to_char(sysdate+1, 'yyyy-mm-dd hh24:mi:ss') as 내일시각

from dual;

 

ex2)

현재시각 및 현재시각으로부터 1일 2시간 3분 4초 뒤를 나타내세요.

-- yyyy-mm-dd hh24:mi:ss

 

select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') as 현재시각,

to_char(sysdate+1+2/24+3/(24*60)+4/(24*60*60),'yyyy-mm-dd hh24:mi:ss') as "1일 2시간 3분 4초 뒤"

from dual;

 

 

1. add_months(날짜, 숫자)

- 숫자가 양수이면 날짜에서 숫자 개월수만큼 더해준 날짜를 나타내는 것이고,

숫자가 음수이면 날짜에서 숫자 개월수만큼 뺀 날짜를 나타내는 것이다.

*여기서 숫자의 단위는 개월수 이다.

 

ex1)

select to_char(add_months(sysdate, -2), 'yyyy-mm-dd hh24:mi:ss') as "2개월전 시각",

to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') as 현재시각,

to_char(add_months(sysdate, 2), 'yyyy-mm-dd hh24:mi:ss') as "2개월후 시각"

from dual;

 

ex2)

오늘 홍길동이 군대에 입대했다. 복무기간이 18개월이라면 제대일자(년-월-일)을 구하세요.

 

select to_char(add_months(sysdate, 18),'yyyy-mm-dd') as 제대일자

from dual;

 

 

2. months_between(날짜1, 날짜2)

- 날짜1에서 날짜2를 뺀 값으로 그 결과는 숫자가 나오는데 결과물 숫자의 단위는 개월수이다.

즉, 두 날짜의 개월 차이를 구할 때 사용하는 것이다.

 

select months_between(add_months(sysdate, 18), sysdate)

from dual;

 

 

- 날짜1 - 날짜2는 날짜1에서 날짜2를 뺀 값으로 숫자가 나오는데 결과물 숫자의 단위는 일수 이다.

즉, 두 날짜의 일수차이를 구할 때 사용하는 것이다.

 

select sysdate + 3 - sysdate

from dual;

 

 

3. last_day(특정날짜)

- 특정날짜가 포함된 달력에서 맨 마지막날짜를 알려주는 것이다.

 

select last_day(sysdate),

to_char(last_day(sysdate), 'yyyy-mm-dd'),

last_day(to_date('2020-02-08', 'yyyy-mm-dd')),

to_char(last_day(to_date('2020-02-08', 'yyyy-mm-dd')),'yyyy-mm-dd')

from dual;

 

4. next_day(특정날짜, '일') '일'~'토'

- 특정날짜로부터 다음번에 돌아오는 가장 빠른 '일'~'토'의 날짜를 알려주는 것이다.

 

select sysdate

, next_day(sysdate, '금')

, next_day(sysdate, '화')

from dual;

 

5. extract ==> 날짜에서 년, 월, 일을 숫자형태로 추출해주는 것이다.

 

select sysdate

, extract(year from sysdate), to_char(sysdate, 'yyyy')

, extract(month from sysdate), to_char(sysdate, 'mm')

, extract(day from sysdate), to_char(sysdate, 'dd')

from dual;

 

*문자 정렬이 왼쪽이면 숫자를 제외한 날짜 혹은 문자, 오른쪽 정렬이면 숫자

 

6. to_yminterval , to_dsinterval

- to_yminterval 은 년 과 월을 나타내어 연산자가 + 이면 날짜에서 더해주는 것이고,

- to_dsinterval 은 일 시간 분 초를 나타내어 연산자가 + 이면 날짜에서 더해주는 것이다.

* 연산자에 - 를 쓰면 날짜를 빼주는 것이다.

 

ex)

현재일로부터 1년 2개월 3일 4시간 5분 6초 뒤를 나타내시오.

 

select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') as 현재시각

, sysdate + to_yminterval('01-02') + to_dsinterval('003 04:05:06')

, to_char(sysdate + to_yminterval('01-02') + to_dsinterval('003 04:05:06'), 'yyyy-mm-dd hh24:mi:ss') as "1년2개월3일4시간5분6초"

from dual;

* alias가 30byte를 초과하면 안된다