[Oracle] 오라클 CAST 함수 사용법 (데이터 형 변환)
- 데이터베이스/오라클
- 2024. 2. 17.
오라클 SQL에서 데이터의 형 변환을 하기 위해서는 CAST 함수를 사용할 수 있다. 오라클에서 형 변환을 할 때는 TO_CHAR, TO_DATE, TO_NUMBER 함수를 많이 사용하지만, CAST 함수는 다른 DBMS와 호환이 가능한 표준 함수이며, CAST 함수만의 장점이 있기 때문에 익혀두면 많은 도움이 될 수 있다.
목차 |
CAST 함수 기본 사용법
SELECT CAST(7566 AS VARCHAR2(4)) AS number_to_char
, CAST('1981-04-02' AS DATE) AS char_to_date
, CAST('2975' AS NUMBER(5)) AS char_to_number1
, CAST('2975.45' AS NUMBER(5,1)) AS char_to_number2
FROM dual
CAST(값 AS 데이터타입 [ error [, fmt [, 'nlsparam' ]]])
error, fmt, nlsparam은 생략할 수 있다.
문자열을 숫자로 변환 시 소수점 자릿수를 지정할 수 있는데, 반올림하여 지정한 자릿수까지만 표시된다.
CAST('2975.45' AS NUMBER(5,1)) → 2975.5
테이블에서 조회 시 사용법
SELECT empno
, hiredate
, sal
, CAST(empno AS VARCHAR2(4)) AS number_to_char
, CAST(hiredate AS VARCHAR2(19)) AS date_to_char
, CAST(sal AS NUMBER(5)) AS number_to_char
FROM emp
WHERE job = 'MANAGER'
실제 테이블의 칼럼을 조회할 때도 동일하게 사용하면 된다.
CAST 함수 형 변환 시 오류 처리 방법
SELECT CAST('2023-99-99' AS DATE)
FROM dual
ORA-01843: 지정한 월이 부적합합니다. 01843. 00000 - "not a valid month" |
문자열의 날짜가 형식이 맞지 않으면 쿼리문에서 오류가 발생한다. CONVERSION ERROR 키워드를 사용하여 오류가 발생할 경우 예외처리를 하여 쿼리문이 정상적으로 수행할 수 있도록 할 수 있다.
SELECT CAST('2023-99-99' AS DATE DEFAULT NULL ON CONVERSION ERROR)
FROM dual
지정할 문자열을 날짜로 변환 시 오류가 발생하면, DEFAULT 값 NULL을 반환하고 쿼리문은 정상적으로 실행된다.
SELECT CAST('N/A' AS NUMBER)
FROM dual
ORA-01722: 수치가 부적합합니다 01722. 00000 - "invalid number" |
문자열이 숫자 형식이 아니면 형 변환 시 오류가 발생한다.
SELECT CAST('N/A' AS NUMBER DEFAULT 0 ON CONVERSION ERROR)
FROM dual
문자열을 숫자로 변환 시 오류가 발생하면, DEFAULT 값 0을 반환한다.
CAST 함수 형 변환 시 fmt 사용법
SELECT CAST('-2975' AS NUMBER, 'S999999') AS char_to_number1 --부호문자열
, CAST('+2975.25' AS NUMBER, 'S999999.99') AS char_to_number2 --부호문자열
, CAST('2,222,975' AS NUMBER, '999,999,999') AS char_to_number3 --금액문자열
, CAST('$2,222,975' AS NUMBER, '$999,999,999') AS char_to_number4 --금액문자열
FROM dual
숫자형식의 문자열이지만 특수문자가 포함되어 있을 경우 fmt를 지정하면 오류 없이 형 변환이 된다.
fmt는 오라클 12.2 버전부터 사용할 수 있다.
SELECT CAST('02/17, 2024' AS DATE, 'mm/dd, yyyy') AS char_to_date1
, CAST('February 17, 2024, 11:00 A.M.' AS DATE
DEFAULT NULL ON CONVERSION ERROR,
'Month dd, YYYY, HH:MI A.M.',
'NLS_DATE_LANGUAGE = American') AS char_to_date2
FROM dual
변환할 문자열의 날짜 형식이 American인 경우 NLS_DATE_LANGUAGE를 설정하여 변환할 수 있다.