단일행함수-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를 초과하면 안된다
'{"CODING": undefind}; > DataBase' 카테고리의 다른 글
ORA-02292: child record found(자식키발견 오류) (0) | 2021.03.11 |
---|---|
12. ORACLE 변환함수(to_char,to_date,to_number) (0) | 2021.02.24 |
10. ORACLE 숫자함수 (0) | 2021.02.22 |
9. ORACLE 문자함수 (0) | 2021.02.20 |
8. DATE 함수, like 연산자, escape (0) | 2021.02.19 |