새소식

인기 검색어

SQL/ORACLE

두 날짜 개월 수 계산 방법

  • -
MONTHS_BETWEEN

 두 날짜의 월 차이를 계산해서, 개월 수를 산출할 때는 MONTHS_BETWEEN 함수를 사용하며 함수의 첫 번째 인자의 날짜에서 두 번째 인자의 날짜를 빼는 방식으로 개월 수가 계산된다.

 

 

MONTHS_BETWEEN의 예시
SELECT MONTHS_BETWEEN(SYSDATE, TO_DATE('2021/11/01', 'YYYY/MM/DD')) AS MONTH
FROM DUAL

/*

 SYSDATE = 2022-01-19
 TO_DATE = 2021-11-01
 
 MONTHS_BETWEEN = (2022/01/19) - (2021/11/01) = 2.5개월

*/

 

 

1. 소수점 절사(TRUNC)
SELECT TRUNC(MONTHS_BETWEEN(SYSDATE,TO_DATE('2021-11-01','YYYY-MM-DD'))) AS MONTH
FROM DUAL

-- TRUNC를 사용하였기에 2.597.... 에서 소수점을 절사한 2만 나타남.

 

2. 소수점 버림(FLOOR)
SELECT FLOOR(MONTHS_BETWEEN(SYSDATE,TO_DATE('2021-11-01','YYYY-MM-DD'))) AS MONTH
FROM DUAL

-- FLOOR을 사용하였기에 2.597.... 에서 소수점을 버린 2만 나타남.

 

 

변형 문제
-- SSN_1 = 570211
-- SSN_2 = 101112
-- SYSDATE = 20221017


select FLOOR(
			MONTHS_BETWEEN(SYSDATE, TO_DATE(
                CASE WHEN SUBSTR(SSN_1 || SSN_2,7,1) IN ('1','2','5','6') THEN '19'
                WHEN SUBSTR(SSN_1 || SSN_2,7,1) IN ('3','4','7','8') THEN '20'
                WHEN SUBSTR(SSN_1 || SSN_2,7,1) IN ('9','0') THEN '18' END
        		|| SUBSTR(SSN_1 || SSN_2,1,6)	,'YYYYMMDD'))
			/12)
	|| '세' AS AGE
FROM DUAL



/*

먼저 CASE WHEN에 SUBSTR의 값을 찾고 조건인 IN안에 해당 값이 있는지 찾는다.
(여기서는 SSN_1과 SSN_2를 합쳐 570211101112가 나왔고 7번째의 1개의 번호는 1이기에 '19'가 된다.)

다음으로 TO_DATE의 값이 나왔다면 MONTHS_BETWEEN을 통해 값을 찾고 찾은 값에 12를 나눠준다.
('19'의 값과 '570211' 값을 합쳐 '19570211'의 값을 나타내고 SYSDATE의 값과 '19570211'을 빼준다.
그렇게 되면 총 788.6이라는 숫자가 나오는데 788개월 6일이라는 뜻으로 여기서 1년인 12개월을 빼주면
'65.71666666666667' 이라는 숫자가 나온다.)

마지막으로 FLOOR을 사용해서 소수점 숫자를 버려주고 '세'를 붙여주면 '65세' 라는 현재 나이가
출력된다.

*/

'SQL > ORACLE' 카테고리의 다른 글

IN  (0) 2022.11.03
START WITH ~ CONNECT BY  (0) 2022.10.18
[ORACLE] CASE  (0) 2022.08.16
[ORACLE] DECODE 함수  (0) 2022.08.16
[ORACLE] NVL, NVL2  (0) 2022.08.16
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.