------------ >> 3. 날짜 함수 << ------------
날짜1 + 숫자 = 날짜2 ==> 날짜1 에서 숫자(일수)만큼 더한 값이 날짜2가 된다.
날짜1 - 숫자 = 날짜2 ==> 날짜1 에서 숫자(일수)만큼 뺀 값이 날짜2가 된다.
여기서 중요한 것은 숫자의 단위가 '일수' 라는 것이다.
--- 단위 환산 ---
1 kg = 1000 g
1 g = 1/1000 kg
1 일 = 24 시간
1 시간 = 1/24 일
1 시간 = 60 분
1 분 = 1/60 시간
1 분 = 60 초
1 초 = 1/60 분
select sysdate - 1, to_char(sysdate -1, 'yyyy-mm-dd hh24:mi:ss') 어제시각
, sysdate , to_char(sysdate , 'yyyy-mm-dd hh24:mi:ss') 현재시각
, sysdate + 1, to_char(sysdate +1, 'yyyy-mm-dd hh24:mi:ss') 내일시각
from dual;
--- 3.1 to_yminterval , to_dsinterval
to_yminterval 은 년 과 월을 나타내어 연산자가 + 이면 날짜에서 더해주는 것이고,
to_dsinterval 은 일 시간 분 초를 나타내어 연산자가 + 이면 날짜에서 더해주는 것이다.
연산자가 - 를 쓰면 날짜를 빼주는 것이다.
현재일로 부터 1년 2개월 3일 4시간 5분 6초 뒤(미래)를 나타내세요
select to_char(sysdate , 'yyyy-mm-dd hh24:mi:ss') 현재시각
, to_char( sysdate + to_yminterval('01-02') + to_dsinterval('003 04:05:06'),'yyyy-mm-dd hh24:mi:ss') "1년 2개월 3일 4시간 5분 6초 뒤"
from dual;
현재일로 부터 1년 2개월 3일 4시간 5분 6초 전(과거)를 나타내세요
select to_char(sysdate , 'yyyy-mm-dd hh24:mi:ss') 현재시각
, to_char( sysdate - to_yminterval('01-02') - to_dsinterval('003 04:05:06'),'yyyy-mm-dd hh24:mi:ss') "1년 2개월 3일 4시간 5분 6초 전"
from dual;
-- 3.2 add_months(날짜,숫자)
==> 숫자가 양수이면 날짜에서 숫자의 개월 수 만큼 더한 날짜를 나타내고,
숫자가 음수이면 날짜에서 숫자의 개월 수 만큼 뺀 날짜를 나타낸다.
여기서 숫자의 단위는 개월 수이다.
select to_char( add_months(sysdate,-2), 'yyyy-mm-dd hh24:mi:ss' ) "2개월 전 시각"
, to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') 현재시각
, to_char( add_months(sysdate,2), 'yyyy-mm-dd hh24:mi:ss' ) "2개월 후 시각"
from dual;
select to_char( add_months(sysdate+1,18), 'yyyy-mm-dd hh24:mi:ss' ) "2개월 후 시각"
from dual;
-- 3.3 months_between(날짜1, 날짜2)
날짜1에서 날짜2를 뺀 값으로 그 결과는 숫자가 나오는데 결과물 숫자의 단위는 개월수이다.
즉, 두 날짜의 개월 차이를 구할 때 사용한다.
select months_between( add_months(sysdate, 3), sysdate )
from dual;
-- *** 날짜1 - 날짜2 = 숫자
-- ==> 날짜1에서 날짜2를 뺀 값으로 숫자가 나오는데 결과물 숫자의 단위는 일수이다.
-- 날짜1에서 날짜2를 뺀 값으로 그 결과는 숫자가 나오는데 결과물 숫자의 단위는 일수이다.
-- 즉, 두 날짜의 일수 차이를 구할 때 사용한다.
select (sysdate+3) - sysdate
from dual;
select add_months(sysdate, 1) - sysdate
from dual;
-- 3.4 last_day(특정날짜)
-- ==> 특정날짜가 포함된 달력에서 맨 마지막 날짜를 알려주는 것
select sysdate, last_day(sysdate)
from dual;
-- 22/07/04 22/07/31
select add_months(sysdate, -1), last_day( add_months(sysdate, -1) )
from dual;
-- 22/06/04 22/06/30
select to_date( '2022-07-04', 'yyyy-mm-dd') + 1
from dual;
-- 22/07/05
select to_date('2020-02-01', 'yyyy-mm-dd'), last_day( to_date('2020-02-01', 'yyyy-mm-dd') )
, to_date('2022-02-01', 'yyyy-mm-dd'), last_day( to_date('2022-02-01', 'yyyy-mm-dd') )
from dual;
-- 3.5 next_day(특정날짜, '일') '일' '월' '화' '수' '목' '금' '토'
-- ==> 특정날짜로부터 다음번에 돌아오는 가장 빠른 '-'요일의 날짜를 알려주는 것이다.
select sysdate
, next_day(sysdate, '금')
, next_day(sysdate, '월')
from dual;
-- 22/07/04 22/07/08 22/07/11
-- 3.6 extract ==> 날짜에서 년, 월, 일을 숫자형태로 추출해주는 것
select sysdate
, to_char(sysdate, 'yyyy'), extract(year from sysdate)
, to_char(sysdate, 'mm'), extract(month from sysdate)
, to_char(sysdate, 'dd'), extract(day from sysdate)
from dual;
--- *** [퀴즈] 현재 시각으로부터 1일 2시간 3분 4초 뒤를 나타내시오 *** ---
select to_char(sysdate , 'yyyy-mm-dd hh24:mi:ss') 현재시각
, to_char(sysdate + ( 1 + 2/24 + 3*1/24/60 + 4*1/24/60/60 ), 'yyyy-mm-dd hh24:mi:ss') "1일 2시간 3분 4초 뒤"
from dual;
-- 2022-07-01 16:41:29
-- 2022-07-02 18:44:33
select to_char(sysdate , 'yyyy-mm-dd hh24:mi:ss') 현재시각
, to_char( sysdate + to_dsinterval('001 02:03:04'),'yyyy-mm-dd hh24:mi:ss') "1년 2개월 3일 4시간 5분 6초 뒤"
from dual;
'SQL' 카테고리의 다른 글
단일행함수 - 기타함수 (0) | 2022.07.04 |
---|---|
단일행함수 - 변환함수 (0) | 2022.07.04 |
단일행함수 - 숫자함수 (0) | 2022.07.04 |
단일행 함수 - 문자 함수 (0) | 2022.07.04 |
like 연산자 % , _ , escape (0) | 2022.07.04 |