-
[Oracle] 근속기간(년, 월, 일) 구하기Oracle 2020. 1. 3. 16:42
근속기간을 구하기 위해선 두가지 데이터 입사일과, 현재날짜를 필요로 합니다.
첫번째, 현재날짜에서 입사일 차감을 통해서 근속개월을 구해야만 합니다. 저는 값을 구하기위해 오라클에서 제공하는 months_between 함수를 이용하였습니다. 입사일이 '1983-05-12'인 사원의 근속개월은 439.731527개월입니다. 더 정확히 말하자면 439개월 0.731527일을 근무하였지요.
months_between(sysdate,'1983-05-12') -> 출력:439.731527
두 번째, 첫번째에서 구한 근속개월을 통해서 근속년수를 구해봅니다. 간단하게 439.731527개월을 12개월(1년)로 나누어서 36년 0.6443036개월 근무하였음을 알 수 있습니다.
months_between(sysdate,'1983-05-12') /12 -> 출력:36.6443036
세 번째, 근무일에서 근속년을 제외한 근속월을 구해보겠습니다. 두 번째 값이 36.6443036년 이었습니다. 근속월은 이 값에서 0.6443036 값을 도출해서 구할 수 있습니다. 소수점 아래값 도출을 위해 mod(값, 1) 함수를 이용하였습니다. 그 다음 0.6443036년 * 12(개월)를 통해서 근속년을 제외한 근속월을 구할 수 있습니다.
mod(months_between(sysdate,'1983-05-12') /12,1) *12 -> 출력: 7.73178203
네 번째, 근속년 근속월을 제외한 근속일을 구합니다. 근속일을 구하는 원리는 세 번째 과정과 동일합니다. 세 번째 단계에서 구한 값은 7.73178203 개월 이었습니다. 이 값에서 0.73178203 개월을 도출해서 * (365/12)일을 곱해주면 근속년과 근속월을 차감하고 남는 근속일인 22.2611071을 구할 수 있습니다.
mod(mod(months_between(sysdate,'1983-05-12') /12,1) *12,1) *(365/12)
마지막으로 위에서 구한 근속년, 근속월, 근속일 값을 나란히 출력해 보겠습니다. 출력 전에 정확한 값의 표현을 위해, 각 값들의 소수점 아래 부분을 없애주어야 합니다. 이를 위해서 trunc() 함수를 이용하였습니다. 그럼 아래와 같이 출력이 됩니다.
SELECT '83/05/12' "입사일", sysdate "현재날짜", trunc(months_between(sysdate,'1983-05-12') /12) "근속년", trunc(mod(months_between(sysdate,'1983-05-12') /12,1) *12) "근속월", trunc(mod(mod(months_between(sysdate,'1983-05-12') /12,1) *12,1) *(365/12)) "근속일" FROM dual