1. 오라클 CAST 함수란?
CAST()
함수는 오라클에서 하나의 데이터 타입을 다른 데이터 타입으로 변환할 때 사용하는 SQL 표준 함수입니다. 예를 들어 문자열을 숫자로, 숫자를 날짜로 변환할 수 있습니다.
CAST (expression AS data_type)
CAST 함수는 ANSI SQL 표준을 따르므로, 오라클 외 다른 RDBMS에서도 광범위하게 사용됩니다.
2. CAST 함수 기본 사용법
-- 문자열을 숫자로 변환
SELECT CAST('100' AS NUMBER) FROM DUAL;
-- 숫자를 문자열로 변환
SELECT CAST(2025 AS VARCHAR2(10)) FROM DUAL;
위 예제는 각각 문자열을 숫자로, 숫자를 문자열로 변환하는 방식입니다. 숫자 → 문자열 변환 시에는 VARCHAR2의 길이를 반드시 명시해야 합니다.
3. 주요 변환 가능한 데이터 타입
- CHAR, VARCHAR2: 문자열
- NUMBER: 숫자
- DATE: 날짜
- TIMESTAMP: 날짜 + 시간
- INTERVAL: 시간 간격
4. 날짜 관련 변환 예제
-- 문자열을 날짜로 변환
SELECT CAST('2025-06-05' AS DATE) FROM DUAL;
-- TIMESTAMP로 변환
SELECT CAST(SYSDATE AS TIMESTAMP) FROM DUAL;
주의할 점은, 오라클에서 DATE
는 시간까지 포함된 7바이트 데이터 형식이며, TIMESTAMP
는 마이크로초까지 표현할 수 있는 더 정밀한 타입입니다.
5. CAST vs TO_CHAR / TO_DATE / TO_NUMBER
오라클에서는 TO_XXX
함수들과 CAST
함수가 유사한 역할을 합니다. 하지만 TO_XXX 함수는 오라클 고유 함수이며, CAST는 ANSI SQL 표준입니다.
-- 숫자 → 문자
TO_CHAR(1234) == CAST(1234 AS VARCHAR2(10))
-- 문자 → 숫자
TO_NUMBER('1234') == CAST('1234' AS NUMBER)
TO_XXX 함수는 포맷 지정이 가능하다는 장점이 있습니다.
6. 실무 활용 예제
6.1 통계 및 집계 함수 내 변환
-- 평균값을 소수점으로 표현
SELECT CAST(AVG(salary) AS NUMBER(10,2)) AS avg_salary FROM employees;
6.2 날짜 비교 및 정렬
SELECT * FROM events
ORDER BY CAST(event_time AS TIMESTAMP);
6.3 조건문에서 사용
SELECT * FROM users
WHERE CAST(registration_date AS DATE) = TO_DATE('2025-06-05', 'YYYY-MM-DD');
7. 에러 발생 사례 및 해결 방법
ORA-01722: invalid number는 문자열을 숫자로 변환할 때, 해당 문자열이 숫자로 해석될 수 없는 경우 발생합니다.
-- 오류 예제
SELECT CAST('abc' AS NUMBER) FROM DUAL; -- 실패
이 경우 REGEXP_LIKE
나 ISNUMERIC
유사 로직을 활용해 사전 검증이 필요합니다.
8. 성능 및 최적화 팁
- CAST는 인덱스를 무효화시킬 수 있으므로 WHERE 절에서 주의
- 변환이 자주 발생하는 컬럼은 가상 컬럼 또는 함수 기반 인덱스 고려
- TO_CHAR 등 오라클 고유 함수와의 비교를 통해 성능 테스트 권장
9. 요약
CAST 함수는 SQL 표준 기반으로 오라클뿐만 아니라 다양한 데이터베이스 환경에서도 활용할 수 있는 범용적인 형 변환 함수입니다. 숫자, 날짜, 문자 등 다양한 데이터 유형을 유연하게 변환하는 데 필수적이며, 실무에서도 필터링, 조건문, 통계 계산 등 다양한 용도로 사용됩니다.
10. 참고자료 및 출처
- Oracle 공식 문서
- Oracle Tutorial - CAST()
- 개발 실무 경험 및 고객사 프로젝트 사례
'Database' 카테고리의 다른 글
[ORACLE] TO_TIMESTAMP() 함수로 정밀한 시간 데이터 처리하기 (0) | 2025.06.06 |
---|---|
[ORACLE] CONVERT() 함수로 데이터베이스 문자셋 문제 해결하기 (0) | 2025.06.06 |
[ORACLE] TO_DATE() 함수로 날짜 문자열을 손쉽게 변환하는 법 (0) | 2025.06.06 |
[ORACLE] TO_CHAR() 함수로 숫자와 날짜 형식 자유자재로 변환하기 (0) | 2025.06.05 |
[ORACLE] TO_NUMBER() 함수로 문자형 숫자 데이터 안전하게 변환하는 방법 (0) | 2025.06.05 |