정보

오라클 EXTRACT 함수 완전정복: 날짜와 시간 추출하는 실무 예제 모음

mindlab091909 2025. 5. 7. 22:54
반응형

 

오라클 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 를 사용하는 것이 좋습니다.


 

반응형