본문 바로가기
Database/Oracle

[Oracle SQL] SQL 함수 - 단일행 함수 (3) 날짜처리 함수

by Amy IT 2022. 5. 10.

단일행 함수 중 날짜처리 함수는 날짜 데이터 타입에 사용하는 함수입니다. 

 

함수 설명
SYSDATE 시스템의 현재 날짜를 반환
MONTHS_BETWEEN 두 날짜 사이의 개월수를 반환
ADD_MONTHS 특정 개월수를 더하거나 뺀 날짜를 반환
NEXT_DAY 지정된 날짜로부터 가장 가까운 요일에 해당하는 날짜를 반환
LAST_DAY 해당 날짜가 속한 달의 마지막 날짜를 반환
ROUND 가장 가까운 년도 또는 월로 반올림하여 반환
TRUNC 가장 가까운 년도 또는 월로 절삭하여 반환

 

날짜 데이터를 다루기에 앞서서 날짜 데이터의 기본적인 포맷을 확인해 보기 위해 다음의 SQL문을 실행합니다.

SELECT * FROM NLS_SESSION_PARAMETERS;

이 SQL문은 오라클에 저장된 여러 가지 파라미터 설정값을 출력합니다. 여기서 오라클의 날짜 포맷이 RR/MM/DD 형식인 것을 확인할 수 있습니다. 

 

* YY 와 RR 형식 비교

오라클에서 년도를 표기하는 방법은 YY 형식과 RR 형식 두 가지가 있습니다. YY 형식은 항상 현재 날짜 세기와 동일하게 처리합니다. 예를 들어 현재 2022년을 기준으로, 1995년에 입사한 사람을 찾기 위해 95라고 입력하면 2095년이라고 인식하여 처리하게 됩니다. 반면 RR 형식은 오라클이 계산 공식에 따라 자동으로 반환년도를 결정합니다. 예를 들어 현재년도의 뒤 두 자리가 00에서 49 사이이고 입력한 년도의 뒤 두 자리가 50에서 99 사이면, 오라클은 입력값을 이전 세기로 인식하여 처리합니다. 즉 현재 2022년을 기준으로, 95를 입력하면 자동으로 1995년으로 반환하는 것입니다. 

 

 

 

1. SYSDATE 함수

 

시스템의 현재 날짜를 반환합니다. 

 

오라클은 날짜 데이터를 내부적으로 숫자 형태로 관리하기 때문에 날짜 데이터의 산술연산이 가능합니다. 다음의 SQL문으로 오늘, 내일, 어제 날짜를 출력할 수 있습니다.

SELECT SYSDATE "오늘", SYSDATE+1 "내일", SYSDATE-1 "어제" FROM dual;

 

사원들의 근무 연수를 출력하는 SQL문입니다. 현재 날짜에서 입사 날짜를 빼면 근무 일수가 나옵니다. 그 값을 365로 나누어 근무 연수를 구할 수 있습니다. 정확한 연수만 출력하기 위해 TRUNC 함수를 사용해 소수점 자리를 절삭합니다.

SELECT ename, hiredate, TRUNC((SYSDATE-hiredate)/365) "년" 
FROM emp ORDER BY 3 DESC;

 

 

 

2. MONTHS_BETWEEN 함수

 

날짜와 날짜 사이의 개월수를 반환합니다. 

 

이번에는 사원들의 근무 월수를 구해볼 수 있습니다. 현재 날짜와 입사 날짜 사이의 개월수를 구하고, TRUNC 함수를 사용해 소수점 자리는 절삭하는 SQL문입니다.

SELECT ename, hiredate, TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)) "근무 월수" 
FROM emp ORDER BY 3 DESC;

 

 

 

3. ADD_MONTHS 함수

 

특정 날짜에서 특정 개월수를 더하거나 뺍니다. 

SELECT SYSDATE "현재", 
	ADD_MONTHS(SYSDATE,1) "다음달", 
	ADD_MONTHS(SYSDATE,-1) "이전달" FROM dual;

 

사원들의 입사 날짜에서 5개월이 지난 날짜를 출력하는 SQL문입니다.

SELECT ename, hiredate, ADD_MONTHS(hiredate,5) 
FROM emp ORDER BY 3 DESC;

 

 

 

4. NEXT_DAY 함수

 

지정된 날짜로부터 가장 가까운 요일에 해당하는 날짜를 반환합니다. 요일은 '일', '월', '화' 또는 '일요일', '월요일', '화요일' 등으로 기술할 수 있으며, 문자 대신 숫자로도 표현 가능합니다. 숫자는 일요일을 기준으로 1부터 시작하여 토요일의 7까지 기술할 수 있습니다. 

 

입사 날짜를 기준으로 돌아오는 가장 가까운 금요일을 출력하는 SQL문입니다.

SELECT ename, hiredate, 
	NEXT_DAY(hiredate,'금'), NEXT_DAY(hiredate,6) 
FROM emp ORDER BY 3 DESC;

 

현재 날짜를 기준으로 돌아오는 금요일을 출력하는 SQL문입니다. 

SELECT SYSDATE, NEXT_DAY(SYSDATE,'금'), NEXT_DAY(SYSDATE,6) FROM dual;

 

입사 후 5개월이 지난 시점에 돌아오는 일요일의 날짜를 출력하는 SQL문입니다.

SELECT ename, hiredate, NEXT_DAY(ADD_MONTHS(hiredate,5),'일') 
FROM emp ORDER BY 2 DESC;

 

 

 

5. LAST_DAY 함수

 

해당 날짜가 속한 달의 마지막 날짜를 반환합니다. 현재 날짜는 22/05/10 이므로 22/05/31 이 반환됩니다.

SELECT SYSDATE, LAST_DAY(SYSDATE) FROM dual;

 

 

 

6. ROUND 함수

 

가장 가까운 연도 또는 월로 반올림합니다. 'YEAR'를 지정하면 연도를 반올림하고 'MONTH'를 지정하면 월을 반올림합니다. 예를 들어 05/07/24 를 연도로 반올림하면 06/01/01 이 되고, 월로 반올림하면 05/08/01 이 됩니다. 06/11/15 를 연도로 반올림하면 07/01/01 이 되고, 월로 반올림하면 06/11/01 이 됩니다. 

 

사원들의 입사 날짜를 연도 및 월로 반올림하여 출력하는 SQL문입니다.

SELECT ename, hiredate, ROUND(hiredate,'year'), ROUND(hiredate,'month') FROM emp;

 

 

 

7. TRUNC 함수

 

가장 가까운 연도 또는 월로 절삭합니다. 'YEAR'를 지정하면 연도만 남기고 절삭하고 'MONTH'를 지정하면 연월만 남기고 절삭합니다. 

 

사원들의 입사 날짜를 연도 및 월로 절삭하여 출력하는 SQL문입니다.

SELECT ename, hiredate, TRUNC(hiredate,'year'), TRUNC(hiredate,'month') FROM emp;

 

 

이상으로 단일행 함수 중 날짜처리 함수를 정리해 보았습니다. 다음 글에서는 변환 함수에 대해 알아보겠습니다.

 

 

댓글