728x90

Oracle SQL에서 날짜 및 시간 정보에서 특정 요소(예: 연도, 월, 일)를 분리하여 추출하고 싶을 때 EXTRACT() 함수는 매우 유용한 도구입니다. 본 블로그 글에서는 EXTRACT 함수의 문법과 주요 사용 예제, 실무 활용법까지 정리하여 제공하고자 합니다.
1. EXTRACT() 함수란?
EXTRACT() 함수는 DATE 또는 TIMESTAMP에서 특정 날짜/시간 구성 요소를 추출할 수 있는 Oracle의 내장 함수입니다.
기본 문법
EXTRACT(field FROM source)
field: 추출할 항목 (예: YEAR, MONTH, DAY, HOUR 등)source: DATE 또는 TIMESTAMP 타입의 칼럼/값
지원되는 field 목록
- YEAR
- MONTH
- DAY
- HOUR
- MINUTE
- SECOND
- TIMEZONE_HOUR
- TIMEZONE_MINUTE
2. 기본 사용 예제
예제 1: 날짜에서 연도 추출
SELECT EXTRACT(YEAR FROM DATE '2025-06-04') AS year_part FROM dual;
예제 2: 월/일 추출
SELECT
EXTRACT(MONTH FROM DATE '2025-06-04') AS month_part,
EXTRACT(DAY FROM DATE '2025-06-04') AS day_part
FROM dual;
예제 3: 현재 시간에서 시/분/초 추출
SELECT
EXTRACT(HOUR FROM SYSTIMESTAMP) AS hour,
EXTRACT(MINUTE FROM SYSTIMESTAMP) AS minute,
EXTRACT(SECOND FROM SYSTIMESTAMP) AS second
FROM dual;
3. 실무 활용 예제
3-1. 가입일 기준 연도별 고객 분석
SELECT EXTRACT(YEAR FROM signup_date) AS signup_year, COUNT(*)
FROM users
GROUP BY EXTRACT(YEAR FROM signup_date)
ORDER BY signup_year;
3-2. 월별 매출 집계
SELECT
EXTRACT(YEAR FROM sale_date) AS sale_year,
EXTRACT(MONTH FROM sale_date) AS sale_month,
SUM(amount) AS total_amount
FROM sales
GROUP BY EXTRACT(YEAR FROM sale_date), EXTRACT(MONTH FROM sale_date)
ORDER BY sale_year, sale_month;
3-3. 특정 시간대 필터링
SELECT *
FROM event_log
WHERE EXTRACT(HOUR FROM event_time) BETWEEN 9 AND 18;
4. TO_CHAR와의 차이점
많은 개발자들이 날짜 구성요소 추출 시 TO_CHAR()와 EXTRACT()를 혼용합니다. 두 함수는 다음과 같은 차이가 있습니다:
| 항목 | EXTRACT() | TO_CHAR() |
|---|---|---|
| 반환 타입 | 숫자(NUMBER) | 문자(CHAR) |
| 주 용도 | 정렬, 계산, 그룹핑 | 출력, 포맷팅 |
| 활용도 | 연산 적합 | 디스플레이 적합 |
예제: EXTRACT vs TO_CHAR 비교
-- EXTRACT
SELECT EXTRACT(YEAR FROM order_date) FROM orders;
-- TO_CHAR
SELECT TO_CHAR(order_date, 'YYYY') FROM orders;
5. 오류 방지 팁
- DATE 또는 TIMESTAMP 이외의 데이터 타입에는 사용 불가
- 문자열 타입은 TO_DATE나 TO_TIMESTAMP로 변환 필요
- TIMEZONE 정보가 있는 경우 정확도 확인 필수
6. 함께 사용하면 좋은 함수들
TO_DATE()– 문자열을 날짜로 변환TO_TIMESTAMP()– 문자열을 타임스탬프로 변환TRUNC()– 날짜 단위를 잘라내기SYSDATE, SYSTIMESTAMP– 현재 날짜/시간
7. 요약
EXTRACT() 함수는 날짜 및 시간 데이터에서 원하는 구성요소를 추출할 수 있는 강력한 함수입니다. 특히 집계 분석, 시간대 필터링, 연산 기반 처리 등 실무에서 자주 사용되며, TO_CHAR와의 차이점을 이해하면 보다 효율적으로 활용할 수 있습니다.
참고자료
- Oracle 공식 문서
- Oracle 10g EXTRACT Reference
- 사내 BI 리포팅 시스템에서의 실무 경험
728x90
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] TRUNC() 숫자 절삭 처리 방법과 ROUND()와의 차이점 (0) | 2025.06.05 |
|---|---|
| [ORACLE] ROUND() 함수 초보 탈출 가이드: 숫자/날짜 반올림 핵심 정리 (0) | 2025.06.05 |
| [ORACLE] LAST_DAY() 사용법 정리 : 월 마지막 날 자동 계산 방법 (0) | 2025.06.05 |
| [ORACLE] NEXT_DAY() 함수로 다음 특정 요일 구하는 방법과 실전 팁 (0) | 2025.06.05 |
| [ORACLE] ADD_MONTHS()로 손쉬운 월 단위 날짜 계산 구현하기 (0) | 2025.06.05 |