오라클(Oracle) 데이터베이스를 다루다 보면, DATE 데이터 타입에서 시간(Hour, Minute, Second)만 추출해야 하는 상황이 자주 발생합니다. 특히 로그 기록, 예약 시스템, 시간대별 통계, 모니터링 데이터 등 시간 단위로 데이터를 분석하거나 출력해야 할 때 시간 추출이 매우 중요하죠.
이때 유용하게 사용할 수 있는 함수가 바로 TO_CHAR와 EXTRACT 함수입니다. 이 두 함수는 모두 날짜에서 시간 정보를 가져오는 데 사용되지만, 반환 타입, 사용 방식, 활용도에서 차이가 있습니다.
이 포스팅에서는 오라클 SQL에서 날짜에서 시간을 추출하는 두 가지 주요 방법인 TO_CHAR 함수와 EXTRACT 함수에 대해 자세히 설명하고, 각각의 장단점, 사용 예제, 실무 적용 팁까지 상세히 안내하겠습니다.
✅ 목차
- 오라클에서 날짜에서 시간 추출이 필요한 이유
- TO_CHAR 함수로 시간 추출하기
- EXTRACT 함수로 시간 추출하기
- TO_CHAR vs EXTRACT 함수 비교 분석
- 실무 활용 예제 3가지
- 마무리 및 정리
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 작성이 가능합니다.
'정보' 카테고리의 다른 글
[Oracle SQL 강의] 오라클 시간 포맷 변경 완벽 가이드 (HH24:MI:SS부터 밀리초, 타임존까지) (0) | 2025.05.07 |
---|---|
[Oracle SQL] 초를 분, 시간, 일로 변환하는 방법 완벽 정리 (0) | 2025.05.07 |
[Oracle SQL 꿀팁] 오라클에서 근삿값(근사치)을 찾는 2가지 핵심 방법: ROW_NUMBER와 RANK 함수 완벽 비교 (0) | 2025.05.07 |
[Oracle SQL] 오라클 SYSDATE에서 날짜만 조회하는 2가지 방법 (TRUNC vs TO_CHAR 완전 정리) (0) | 2025.05.07 |
[Oracle JSON 함수 정복] JSON_ARRAYAGG 함수 완벽 가이드 | 여러 행을 JSON 배열로 묶기 (0) | 2025.05.07 |