Cracking Code

SQL - MONTHS_BETWEEN, ADD_MONTHS, NEXT_DAY 본문

Database

SQL - MONTHS_BETWEEN, ADD_MONTHS, NEXT_DAY

CrackCo 2020. 7. 18. 22:44
날짜를 인자로 받아 계산하여 결과를 리턴하는 날짜 관련 함수를 알아보겠습니다.

함수를 알아보기 전에 앞서 간단한 날짜 출력문을 알아보겠습니다.

SYSDATE: 현재 날짜 출력
SYSTIMESTAMP: 현재 날짜, 시각 출력

각 컬럼에 현재 날짜 및 날짜와 시간이 잘 표시됩니다.

 

주의)

날짜 데이터는 그 안에 현재의 연, 월, 일, 시간 모두 포함되어 있습니다.

그 데이터를 기반으로 미리 설정된 날짜 형식에 따라 출력됩니다.

 

그럼, 이 날짜 데이터들을 활용한 함수들에 대해 알아볼까요?

1. MONTHS_BETWEEN

MONTHS_BETWEEN(date1, date2)

date1과 date2의 월간 차이를 계산하여 출력합니다.

 

사원 테이블의 부서 번호가 10인 사원들이 몇 달 근무했는지 알아볼까요?

SELECT ENAME, HIREDATE, SYSDATE,
    MONTHS_BETWEEN(SYSDATE, HIREDATE) M_BETWEEN,
    TRUNC(MONTHS_BETWEEN(SYSDATE, HIREDATE)) T_BETWEEN
FROM EMP
WHERE DEPTNO = 10;

MONTHS_BETWEEN 함수만 사용한 M_BETWEEN 컬럼은 날짜의 간 차이를 계산하여 월간 차이를 출력하며 월간 차이를 제외한 나머지 일, 시간 등은 소숫점으로 표시하는 것을 볼 수 있습니다.

소수점 절삭 함수인 TRUNC를 사용하면 T_BETWEEN처럼 깔끔하게 월간 차이만 표현할 수 있습니다.

2. ADD_MONTHS

ADD_MONTHS(date, n)

date에 n만큼의 월수를 더해 출력합니다.

 

사원 테이블의 부서 번호가 10인 사원들의 고용 날짜에 5달을 더한 것과 5달을 뺀 것을 출력해봅시다.

SELECT ENAME, HIREDATE,
    ADD_MONTHS(HIREDATE, 5) A_MONTH,
    ADD_MONTHS(HIREDATE, -5) M_MONTH
FROM EMP
WHERE DEPTNO = 10;

날짜에 다섯 달의 추가와 뺀 날짜가 자동으로 계산되어 년/월/일 형태로 잘 출력되는 것을 볼 수 있습니다.

 

3. NEXT_DAY

NEXT_DAY(date, string | n)

date 날짜 기준으로 string 요일의 날짜를 구합니다.

날짜는 string으로 표현하거나 숫자 n으로 표현할 수 있습니다.

여기서 잠깐 Oracle DB의 요일에 대해 알아볼까요?

일, 일요일, 1 / 월, 월요일, 2
화, 화요일, 3 / 수, 수요일, 4
목, 목요일, 5 / 금, 금요일, 6
토, 토요일, 7

시스템 언어에 따라서 string은 다르게 적용됩니다.
만약 영어로 설정되어 있다면
일요일에 해당하는 영어 SUN, SUNDAY 문자열로 표현할 수 있습니다.

 

오늘 날짜 2020-07-18 기준으로 돌아오는 수요일을 출력해보겠습니다.

SELECT NEXT_DAY(SYSDATE, '수')
FROM DUAL;

20/07/22가 출력되었습니다. 달력을 확인해보니 2020년 7월 22일은 수요일입니다.

잘 출력되었네요. 😁

'Database' 카테고리의 다른 글

SQL - CASE  (0) 2020.07.19
SQL - TO_CHAR, TO_NUMBER, TO_DATE  (0) 2020.07.19
SQL - CEIL, FLOOR, ROUND,TRUNC  (0) 2020.07.17
SQL - REPLACE  (0) 2020.07.16
SQL - LENGTH  (0) 2020.07.16
Comments