728x90

Oracle SQL에서 숫자나 날짜 데이터를 정밀하게 절삭(버림)할 수 있는 대표적인 함수가 TRUNC()입니다. 이 함수는 금융, 통계, 리포트 작성 등 다양한 분야에서 정제된 데이터를 제공하는 데 매우 유용합니다. 본 글에서는 TRUNC 함수의 문법, 숫자 및 날짜 처리 방식, 실무 예제, ROUND와의 비교까지 폭넓게 다룹니다.
1. TRUNC() 함수란?
TRUNC() 함수는 숫자 또는 날짜를 특정 단위로 자르는 Oracle 내장 함수입니다. 반올림이 아닌 버림이라는 점이 특징입니다.
기본 문법
-- 숫자 절삭
TRUNC(number [, decimal_places])
-- 날짜 절삭
TRUNC(date [, format])
2. 숫자형 TRUNC() 사용법
소수점 이하를 절삭하거나, 특정 자리 수까지만 표시하고 싶을 때 사용됩니다.
예제 1: 소수점 이하 절삭
SELECT TRUNC(123.4567, 2) AS result FROM dual;
-- 결과: 123.45
예제 2: 정수로 절삭
SELECT TRUNC(78.9) AS result FROM dual;
-- 결과: 78
예제 3: 소수점 앞자리 절삭
SELECT TRUNC(5678.91, -2) AS result FROM dual;
-- 결과: 5600
3. 날짜형 TRUNC() 사용법
TRUNC는 날짜 값을 자를 때도 매우 유용하며, 다양한 단위를 기준으로 날짜를 절삭할 수 있습니다.
지원 포맷 예시
- 'DD': 해당 날짜의 자정 (기본값)
- 'MM': 해당 월의 1일
- 'YYYY': 해당 연도의 1월 1일
- 'D': 주의 시작일 (NLS 설정에 따라 다름)
- 'HH', 'HH24', 'MI': 시간, 분 단위 절삭
예제 4: 일 단위 절삭
SELECT TRUNC(SYSDATE) AS today_midnight FROM dual;
예제 5: 월 단위 절삭
SELECT TRUNC(TO_DATE('2025-06-14', 'YYYY-MM-DD'), 'MM') AS month_start FROM dual;
-- 결과: 2025-06-01
예제 6: 연 단위 절삭
SELECT TRUNC(DATE '2025-06-14', 'YYYY') AS year_start FROM dual;
-- 결과: 2025-01-01
4. 실무 활용 예제
4-1. 거래 금액 절삭 보고서
SELECT customer_id, TRUNC(total_amount, 0) AS amount_whole
FROM transactions;
4-2. 월별 매출 집계 시 날짜 절삭
SELECT TRUNC(sale_date, 'MM') AS sale_month, SUM(sale_amount)
FROM sales
GROUP BY TRUNC(sale_date, 'MM')
ORDER BY sale_month;
4-3. 시간 단위 로그 절삭
SELECT TRUNC(event_time, 'HH24') AS hour_block, COUNT(*)
FROM system_logs
GROUP BY TRUNC(event_time, 'HH24')
ORDER BY hour_block;
5. TRUNC vs ROUND 차이점
| 항목 | TRUNC() | ROUND() |
|---|---|---|
| 기능 | 버림 | 반올림 |
| 숫자 처리 | 지정 소수점 이하 절삭 | 지정 자리 반올림 |
| 날짜 처리 | 지정 단위 기준 시작 날짜 | 가장 가까운 날짜 |
예제 비교
SELECT TRUNC(123.789, 1), ROUND(123.789, 1) FROM dual;
-- 결과: 123.7 , 123.8
6. 오류 방지 팁
- 두 번째 인자(자릿수/포맷)는 생략 가능하지만 정확하게 지정하는 것이 바람직함
- 날짜 포맷 문자열은 대소문자 구분 없음
- 시간 단위 절삭 시 HH 또는 HH24는 정확한 요구사항에 맞춰 선택
7. 함께 사용하면 좋은 함수들
ROUND()– 반올림 처리FLOOR(), CEIL()– 내림, 올림 처리TO_DATE(), TO_TIMESTAMP()– 형 변환SYSDATE, SYSTIMESTAMP– 현재 날짜/시간
8. 요약
TRUNC() 함수는 정밀한 절삭 처리를 통해 숫자 및 날짜 데이터를 원하는 수준으로 정제할 수 있도록 도와줍니다. ROUND와의 차이를 잘 이해하고, 다양한 포맷 옵션을 익히면 데이터 집계, 정렬, 그룹핑 등의 실무 작업에서 매우 강력한 도구로 활용할 수 있습니다.
참고자료
- Oracle 공식 문서
- Oracle 10g TRUNC Reference
- 사내 회계 리포트 자동화 시스템 실전 사례
728x90
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] LOCALTIMESTAMP()로 시간대 기반 데이터 정확히 처리하기 (0) | 2025.06.05 |
|---|---|
| [ORACLE] NEW_TIME() 함수로 로컬 시간을 GMT로 변환하기 (0) | 2025.06.05 |
| [ORACLE] ROUND() 함수 초보 탈출 가이드: 숫자/날짜 반올림 핵심 정리 (0) | 2025.06.05 |
| [ORACLE] EXTRACT()로 연도 별, 월 별, 일자 별 통계 분석하는 방법 (0) | 2025.06.05 |
| [ORACLE] LAST_DAY() 사용법 정리 : 월 마지막 날 자동 계산 방법 (0) | 2025.06.05 |