정보

[Oracle SQL] 날짜(Date)에서 시간만 추출하는 2가지 방법: TO_CHAR vs EXTRACT 완벽 정리

mindlab091908 2025. 5. 7. 22:51
반응형

 

오라클(Oracle) 데이터베이스를 다루다 보면, DATE 데이터 타입에서 시간(Hour, Minute, Second)만 추출해야 하는 상황이 자주 발생합니다. 특히 로그 기록, 예약 시스템, 시간대별 통계, 모니터링 데이터 등 시간 단위로 데이터를 분석하거나 출력해야 할 때 시간 추출이 매우 중요하죠.

이때 유용하게 사용할 수 있는 함수가 바로 TO_CHAR와 EXTRACT 함수입니다. 이 두 함수는 모두 날짜에서 시간 정보를 가져오는 데 사용되지만, 반환 타입, 사용 방식, 활용도에서 차이가 있습니다.

이 포스팅에서는 오라클 SQL에서 날짜에서 시간을 추출하는 두 가지 주요 방법인 TO_CHAR 함수EXTRACT 함수에 대해 자세히 설명하고, 각각의 장단점, 사용 예제, 실무 적용 팁까지 상세히 안내하겠습니다.


✅ 목차

  1. 오라클에서 날짜에서 시간 추출이 필요한 이유
  2. TO_CHAR 함수로 시간 추출하기
  3. EXTRACT 함수로 시간 추출하기
  4. TO_CHAR vs EXTRACT 함수 비교 분석
  5. 실무 활용 예제 3가지
  6. 마무리 및 정리

1. 오라클에서 날짜에서 시간 추출이 필요한 이유

오라클의 DATE 타입은 날짜와 시간 정보를 모두 포함하고 있습니다. 예를 들어 SYSDATE는 2024-09-19 10:25:43과 같은 형태의 값을 가집니다. 우리가 원하는 시간 정보는 여기서 "10:25:43"처럼 시, 분, 초(HH24:MI:SS) 형태로 추출하는 것입니다.

이 시간 정보가 필요한 상황은 다음과 같습니다:

  • 특정 시간대(예: 오전 9시~10시)에 발생한 이벤트 필터링
  • 시간별 통계 분석 (예: 시간대별 접속 수)
  • 로그 기록에서 이벤트 발생 시간만 추출
  • 데이터 시각화용 전처리 작업

이러한 요구사항을 충족시키기 위해 사용할 수 있는 방법이 바로 TO_CHAR와 EXTRACT입니다.


2. TO_CHAR 함수로 시간 추출하기

TO_CHAR 함수는 날짜 또는 숫자를 문자열로 변환하는 함수입니다. 이 함수에 포맷을 지정하여 SYSDATE와 같은 DATE 타입 값에서 시간 정보를 원하는 형식의 문자열로 추출할 수 있습니다.

📌 기본 구문

TO_CHAR(날짜_값, 'HH24:MI:SS')

🧪 예제 1: 현재 시간 정보 추출

SELECT SYSDATE,
       TO_CHAR(SYSDATE, 'HH24:MI:SS') AS full_time,
       TO_CHAR(SYSDATE, 'HH24')       AS hour_part,
       TO_CHAR(SYSDATE, 'MI')         AS minute_part,
       TO_CHAR(SYSDATE, 'SS')         AS second_part
  FROM dual;

✅ 결과 예시

SYSDATE full_time hour_part minute_part second_part

2024-09-19 10:25:43 10:25:43 10 25 43

👍 장점

  • 다양한 포맷 지정이 가능 (HH24, MI, SS 조합)
  • 문자열 형태로 직접 출력이 쉬움
  • 문자열 비교, 패턴 매칭 용도에 적합

👎 단점

  • 숫자 연산에 바로 사용하기 어려움
  • 반환값이 문자열이므로 정렬, 필터링 시 주의 필요

3. EXTRACT 함수로 시간 추출하기

EXTRACT 함수는 날짜 혹은 TIMESTAMP 데이터에서 **특정 필드(HOUR, MINUTE, SECOND 등)**만 숫자 형식으로 추출할 수 있습니다.

📌 기본 구문

EXTRACT(필드 FROM TIMESTAMP)

주의할 점은 DATE 타입에서 바로 추출할 수 없고, 반드시 TIMESTAMP로 캐스팅해야 한다는 것입니다.

🧪 예제 2: 현재 시간 정보 숫자로 추출

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-09-19 10:25:43 10 25 43

👍 장점

  • 숫자 형식으로 추출되어 연산, 비교에 유리
  • 시간별 그룹핑, 조건 필터링에 적합

👎 단점

  • DATE → TIMESTAMP 캐스팅 필요
  • 포맷 지정이 불가능 (시/분/초 조합 출력 불가)

4. TO_CHAR vs EXTRACT 함수 비교 분석

항목 TO_CHAR EXTRACT

반환 타입 문자열 숫자
포맷 지정 자유로움 (HH24:MI:SS) 불가능 (단일 항목만 추출)
연산 용이성 낮음 (문자열 변환 필요) 높음 (바로 숫자 연산 가능)
사용 조건 DATE 그대로 사용 가능 TIMESTAMP로 변환 필수
활용 예 출력용, 로그 확인 필터링, 그룹핑, 계산용

5. 실무 활용 예제 3가지

📊 예제 1: 시간별 로그인 수 분석

SELECT TO_CHAR(login_time, 'HH24') AS hour,
       COUNT(*) AS login_count
  FROM user_login_log
 GROUP BY TO_CHAR(login_time, 'HH24')
 ORDER BY hour;
  • 설명: 시간 단위로 로그인 횟수를 집계. TO_CHAR로 문자열로 변환 후 그룹핑

🕒 예제 2: 특정 시간대 데이터 필터링 (EXTRACT)

SELECT *
  FROM sensor_data
 WHERE EXTRACT(HOUR FROM CAST(measured_at AS TIMESTAMP)) BETWEEN 8 AND 10;
  • 설명: 오전 8시~10시 사이의 센서 데이터만 필터링

🔢 예제 3: 시간 기준 계산 (차이 구하기)

SELECT start_time,
       end_time,
       EXTRACT(HOUR FROM CAST(end_time AS TIMESTAMP)) - EXTRACT(HOUR FROM CAST(start_time AS TIMESTAMP)) AS hour_diff
  FROM schedule;
  • 설명: 시작 시간과 종료 시간의 차이를 시간 단위로 계산

6. 마무리 및 정리

오라클 SQL에서 날짜에서 시간 정보를 추출해야 할 때는 TO_CHAR와 EXTRACT 함수 두 가지를 상황에 맞게 잘 활용하는 것이 중요합니다.

  • TO_CHAR는 출력이나 포맷 지정이 필요한 경우에 매우 편리하며, 문자열 기반의 가공이 필요할 때 유용합니다.
  • EXTRACT는 숫자 기반의 연산, 비교, 그룹핑 등에 적합하며, 시간 기반 데이터 분석에 강점을 가집니다.

실무에서는 두 함수를 혼합하여 사용하는 경우도 많으며, 출력은 TO_CHAR, 연산은 EXTRACT로 구분하면 훨씬 효율적인 SQL 작성이 가능합니다.

 

반응형