오라클 SQL에서 날짜와 시간을 다룰 때, 어떤 함수를 주로 사용하시나요? 아마 많은 분들이 TO_CHAR 함수를 떠올리실 겁니다. 하지만 오늘 소개할 EXTRACT 함수는 날짜와 시간 데이터를 숫자형(NUMBER) 으로 분리해 추출할 수 있는 아주 유용한 도구입니다.
이 글에서는 EXTRACT 함수의 기본 사용법부터 TO_CHAR 함수와의 차이점, 실제 테이블 예제까지 실무 중심으로 완벽하게 정리해드립니다. 오라클 SQL을 사용하는 개발자, 데이터 분석가, DB 관리자라면 반드시 알고 있어야 할 핵심 내용입니다.
📌 EXTRACT 함수란?
EXTRACT 함수는 오라클 SQL에서 날짜형 또는 타임스탬프형 데이터에서 특정 구성 요소(연, 월, 일, 시, 분, 초 등) 를 숫자로 추출해주는 함수입니다.
✅ 반환형: NUMBER
- EXTRACT(YEAR FROM hiredate) → 숫자형 2024
- EXTRACT(MONTH FROM hiredate) → 숫자형 8
반면 TO_CHAR는 반환값이 문자열이므로 두 함수는 사용 목적이 다릅니다.
함수명 반환값 타입 예시 결과
EXTRACT | NUMBER | 2024 |
TO_CHAR | VARCHAR2 | '2024' |
🧩 EXTRACT 함수 기본 문법
EXTRACT( <구성 요소> FROM <날짜|TIMESTAMP> )
- 구성 요소: YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
- 날짜는 DATE 또는 TIMESTAMP 타입이어야 함
🗓️ EXTRACT 함수로 날짜 추출하기 (년, 월, 일)
먼저 SYSDATE를 기준으로 YEAR, MONTH, DAY를 추출해보겠습니다.
SELECT SYSDATE,
EXTRACT(YEAR FROM SYSDATE) AS year_part,
EXTRACT(MONTH FROM SYSDATE) AS month_part,
EXTRACT(DAY FROM SYSDATE) AS day_part
FROM dual;
💡 결과 예시
SYSDATE YEAR_PART MONTH_PART DAY_PART
2024-08-25 14:23:00 | 2024 | 8 | 25 |
- SYSDATE는 기본적으로 DATE 타입입니다.
- TO_CHAR(SYSDATE, 'YYYY')와는 다르게 문자열이 아닌 숫자로 결과가 출력됩니다.
- MONTH_PART는 앞자리에 0을 붙이지 않고 8로 반환됩니다.
⏰ EXTRACT 함수로 시간 추출하기 (시, 분, 초)
오라클의 DATE 타입은 시간 정보를 내부적으로 가지고 있지만, 시/분/초를 추출하기 위해서는 TIMESTAMP 타입으로 캐스팅해야 합니다.
SELECT SYSDATE,
EXTRACT(HOUR FROM CAST(SYSDATE AS TIMESTAMP)) AS hour_part,
EXTRACT(MINUTE FROM CAST(SYSDATE AS TIMESTAMP)) AS minute_part,
EXTRACT(SECOND FROM CAST(SYSDATE AS TIMESTAMP)) AS second_part
FROM dual;
🔎 결과 예시
SYSDATE HOUR_PART MINUTE_PART SECOND_PART
2024-08-25 14:23:00 | 14 | 23 | 0 |
- CAST(SYSDATE AS TIMESTAMP)를 하지 않으면 HOUR, MINUTE, SECOND는 추출할 수 없습니다.
- 실무에서 시간 조건 쿼리를 작성할 때 유용합니다.
🧪 실제 테이블에서 EXTRACT 함수 사용하기
직원 테이블(EMP)에서 특정 직무(MANAGER)를 가진 직원의 입사일 HIRE_DATE에서 년/월/일을 추출해보겠습니다.
SELECT ENAME,
HIREDATE,
EXTRACT(YEAR FROM HIREDATE) AS year_part,
EXTRACT(MONTH FROM HIREDATE) AS month_part,
EXTRACT(DAY FROM HIREDATE) AS day_part
FROM EMP
WHERE JOB = 'MANAGER';
📘 실무 포인트
- 연차 계산 시: EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM HIREDATE)
- 분기별 입사자 분류 시: EXTRACT(MONTH FROM HIREDATE) BETWEEN 1 AND 3
이처럼 EXTRACT는 데이터 분석이나 집계용 쿼리에서 매우 강력한 도구가 됩니다.
🔄 TO_CHAR 함수와의 차이점 정리
많은 경우 TO_CHAR 함수를 선호하기도 합니다. 두 함수의 차이점을 명확히 이해하면 목적에 따라 적절히 선택할 수 있습니다.
✅ TO_CHAR 함수 사용 예제
SELECT TO_CHAR(SYSDATE, 'YYYY') AS year_part,
TO_CHAR(SYSDATE, 'MM') AS month_part,
TO_CHAR(SYSDATE, 'DD') AS day_part,
TO_CHAR(SYSDATE, 'HH24') AS hour_part,
TO_CHAR(SYSDATE, 'MI') AS minute_part,
TO_CHAR(SYSDATE, 'SS') AS second_part
FROM dual;
항목 TO_CHAR 결과 EXTRACT 결과
연 | '2024' | 2024 |
월 | '08' | 8 |
일 | '25' | 25 |
시 | '14' | 14 |
📌 정리: 언제 어떤 함수를 사용할까?
목적 추천 함수
숫자형 연산 필요 | EXTRACT |
문자열 포맷 변환, 자리수 고정 | TO_CHAR |
그룹핑, 집계, 통계 목적 | EXTRACT |
출력 포맷 커스터마이징 | TO_CHAR |
💼 실무 활용 시나리오 예시
1. 월별 사용자 등록 수 집계
SELECT EXTRACT(MONTH FROM reg_date) AS reg_month,
COUNT(*) AS user_count
FROM users
GROUP BY EXTRACT(MONTH FROM reg_date);
2. 1월에 입사한 직원 조회
SELECT ename, hiredate
FROM emp
WHERE EXTRACT(MONTH FROM hiredate) = 1;
3. 오늘 날짜 기준으로 근무 연수 계산
SELECT ename,
EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM hiredate) AS work_years
FROM emp;
📝 마무리 정리
EXTRACT 함수는 실무에서 날짜와 시간의 특정 요소를 숫자로 추출하고자 할 때 매우 강력한 도구입니다. 특히 다음과 같은 상황에 유용하게 사용됩니다:
- 날짜를 기준으로 통계/집계하는 보고서 생성
- 분기/연도/월 단위 필터링 조건 작성
- 문자열보다 숫자로 처리해야 할 연산 로직 구현
하지만 TO_CHAR와는 용도가 다르므로, 포맷팅이 필요할 때는 TO_CHAR, 숫자형 계산이나 그룹핑이 필요할 때는 EXTRACT 를 사용하는 것이 좋습니다.
'정보' 카테고리의 다른 글
[Oracle] 오라클 컬럼 사이즈 변경 방법 완벽 정리: ALTER TABLE MODIFY 실전 가이드 (0) | 2025.05.07 |
---|---|
[Oracle SQL 완벽 정리] 정수 반올림, 버림 처리 방법 – ROUND와 TRUNC 함수 완전 정복 (0) | 2025.05.07 |
ChatGPT를 쓰기 전, 반드시 이것부터 하세요! – "Custom Instructions" 완벽 가이드 (0) | 2025.05.06 |
[Kling AI 사용법 완전정복] 제품 사진 몇 장으로 고퀄리티 AI 영상을 만드는 법! (1) | 2025.05.06 |
블로그와 인스타그램을 동시에 키우는 스마트한 전략 - 콘텐츠 확산과 수익화를 동시에 잡는 방법 (0) | 2025.05.06 |