Programming/Database (Oracle, SQL)

[Oracle/SQL] 날짜함수 - SYSDATE, NEXT_DAY, LAST_DAY 등

Sujin Lee (Daisy) 2020. 2. 2. 23:33

 - 오라클에서 날짜를 저장 데이터형 : DATE, TIMESTAMP

 

1. SYSDATE

 - 오라클이 설치된 컴퓨터의 시스템 시간을 알려준다.

--SYSDATE 예시)   
SELECT SYSDATE FROM DUAL; -- 오늘 날짜 출력
SELECT TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS') FROM DUAL; -- 현재 월-일-년도 시간:분:초 출력

--SYSDATE 연산 예시)   
SELECT SYSDATE+1 FROM DUAL; -- 내일 날짜 출력
SELECT TO_CHAR(SYSDATE-30, 'MM-DD-YYYY HH24:MI:SS') FROM DUAL; -- 30일 전 출력
SELECT TO_CHAR(SYSDATE-8/24, 'MM-DD-YYYY HH24:MI:SS') FROM DUAL; -- 8시간 전 출력
SELECT TO_CHAR(SYSDATE-30/1440, 'MM-DD-YYYY HH24:MI:SS') FROM DUAL; -- 30일 전 출력

 

2. MONTHS_BETWEEN

 - 형식 : MONTHS_BETWEEN(날짜1, 날짜2) 

 - 기능 : 날짜1과 날짜2 사이의 개월수를 구해준다. 

 - 날짜1>날짜2 (즉, 날짜1이 더 최근, 날짜2가 더 예전)이면 결과값은 (+)

   날짜1<날짜2 이면 결과값은 (-) 

 - 소숫점까지 나온다. 

--MONTHS_BETWEEN 예시)
SELECT MONTHS_BETWEEN(SYSDATE, DATE '2019-05-12') FROM DUAL; --결과: 19.05.12로부터 몇개월 지났는지
SELECT MONTHS_BETWEEN(DATE '2020-02-03', DATE '2019-12-02') FROM DUAL; --결과: 2.03
SELECT MONTHS_BETWEEN(DATE '2019-12-02', DATE '2020-02-03') FROM DUAL; --결과: -2.03

 

3. NEXT_DAY

 - 형식 : NEXT_DAY('기준일자', '찾을 요일') 

 - 기능 : 기준일자로부터 다음번 지정 요일이 몇일인지 

 - 요일표기 :

   1) 영문판 : 'SUNDAY', 'SUN' 과 같이 기재

   2) 한글판 : '일요일', '일' 과 같이 기재 

   3) 숫자 : 일요일부터 1,2,3,4,... 순서로 센다. (1: 일요일, 2:월요일, ... 7: 토요일)

--NEXT_DAY 예시)
--오라클 영어판 설치한 경우) 
SELECT NEXT_DAY(DATE '2020-01-01', 'SUNDAY') FROM DUAL;
SELECT NEXT_DAY(DATE '2020-01-01', 'SUN') FROM DUAL;
SELECT NEXT_DAY(DATE '2020-01-01', 1) FROM DUAL;
--오라클 한글판 설치한 경우) 
SELECT NEXT_DAY(DATE '2020-01-01', '일요일') FROM DUAL; --결과: 20/01/05 (가장 가까운 다음 일요일)
SELECT NEXT_DAY(DATE '2020-01-01', '일') FROM DUAL; --결과: 20/01/05 (가장 가까운 다음 일요일)
SELECT NEXT_DAY(DATE '2020-01-01', 1) FROM DUAL;  --결과: 20/01/05 (가장 가까운 다음 일요일)
SELECT NEXT_DAY(DATE '2020-01-01', '토') FROM DUAL; --결과: 20/01/04 (가장 가까운 다음 토요일)
SELECT NEXT_DAY(DATE '2020-01-01', 7) FROM DUAL; --결과: 20/01/04 (가장 가까운 다음 토요일)

 

4. LAST_DAY

 - 형식 : LAST_DAY(날짜) 

 - 기능 : 해당 월의 마지막 날짜를 알려준다. 

--LAST_DAY 예시)
SELECT LAST_DAY(SYSDATE) FROM DUAL; --결과: 이번달 마지막 날짜
SELECT LAST_DAY(ADD_MONTHS(SYSDATE,1)) FROM DUAL; --결과: 다음달 마지막 날짜
SELECT LAST_DAY('20/08/01') FROM DUAL; --결과: 20/08/31 (2020년 8월의 마지막 날짜)

 

5. ADD_MONTHS

 - 형식 : ADD_MONTHS(날짜, 개월수)

 - 기능 : 해당 날짜로부터 지정한 개월수 뒤의 날짜를 알려준다. 

--ADD_MONTHS 예시)
SELECT ADD_MONTHS('19/12/02',6) FROM DUAL; --결과: 20/06/02 (19/12/02로부터 6개월 후의 날짜) 

 

 

ROUNDTRUNC는 숫자함수로써 각각 소수점 반올림, 버림 기능을 하기도 하지만 날짜함수로써도 사용된다. 

 

6. ROUND

 - 형식 : ROUND(날짜, 날짜형식) 

 - 기능 : 날짜를 반올림 한다.

--ROUND 예시) 
SELECT
  TO_CHAR( 
        ROUND( TO_DATE( '2020-02-03 18:53:29',  'YYYY-MM-DD HH24:MI:SS' ) ), 
  'YYYY-MM-DD' ) 
FROM
  dual;
  --결과: 2020-02-04 ('2020-02-03 18:53:29'을 반올림한 날짜) 

 

7. TRUNC

 - 형식 : TRUNC(날짜, 날짜형식) 

 - 기능 : 날짜를 버림한다. 

--TRUNC 날짜계산 예시)
--1) 분까지만 내버려두고 초는 버림 ==> 결과: 19/05/12 13:35:00
SELECT TRUNC(TO_DATE('2019-05-12 13:35:28', 'YYYY-MM-DD HH24:MI:SS'), 'MI') FROM DUAL; 
--2) 시까지만 내버려두고 분은 버림 ==> 결과: 19/05/12 13:00:00
SELECT TRUNC(TO_DATE('2019-05-12 13:35:28', 'YYYY-MM-DD HH24:MI:SS'), 'HH24') FROM DUAL; 
--3) 일까지만 내버려두고 시는 버림 ==> 결과: 19/05/12 00:00:00
SELECT TRUNC(TO_DATE('2019-05-12 13:35:28', 'YYYY-MM-DD HH24:MI:SS'), 'DD') FROM DUAL; 
--4) 월까지만 내버려두고 일은 버림 ==> 결과: 19/05/01 00:00:00
SELECT TRUNC(TO_DATE('2019-05-12 13:35:28', 'YYYY-MM-DD HH24:MI:SS'), 'MM') FROM DUAL; 
SELECT TRUNC(TO_DATE('2019-05-12 13:35:28', 'YYYY-MM-DD HH24:MI:SS'), 'MON') FROM DUAL; 
SELECT TRUNC(TO_DATE('2019-05-12 13:35:28', 'YYYY-MM-DD HH24:MI:SS'), 'MONTH') FROM DUAL; 
--5) 년까지만 내버려두고 월은 버림 ==> 결과: 19/01/01 00:00:00
SELECT TRUNC(TO_DATE('2019-05-12 13:35:28', 'YYYY-MM-DD HH24:MI:SS'), 'Y') FROM DUAL; 
SELECT TRUNC(TO_DATE('2019-05-12 13:35:28', 'YYYY-MM-DD HH24:MI:SS'), 'YY') FROM DUAL; 

 

↓이 글이 유용했다면 아래 ♡버튼을 눌러주세요! ↓

반응형