- 형변환 이라는 것은 두 개의 데이터의 데이터 타입(형)이 일치하도록 변환하는 것이다.
- 예를 들어 숫자와 문자열의 비교, 문자열과 날짜형의 비교와 같이 데이터 타입이 불일치할 때 발생한다.
- 형 변환은 명시적(Explicit) 형변환과 암시적(Implicit) 형변환이 있다.
- 명시적 형변환은 형변환 함수를 사용해서 데이터 타입을 일치시키는 것으로 개발자가 SQL을 사용할 때 형변환 함수를 사용해야 한다.
형변환 함수
형변환 함수 | 설명 |
---|
TO_NUMBER(문자열) | 문자열을 숫자로 변환한다. |
TO_CHAR(숫자 혹은 날짜.[FORMAT]) | 숫자 혹은 날짜를 지정된 FORMAT의 문자로 변환한다. |
TO_DATE(문자열, FORMAT) | 문자열을 지정된 FORMAT의 날짜형으로 변환한다. |
- 암시적 형변환은 개발자가 형변환을 하지 않은 경우 데이터베이스 관리 시스템이 자동으로 형변환하는 것을 의미한다.
인덱스 컬럼에 형변환을 수행하면 인덱스를 사용하지 못한다.
- 인덱스는 데이터를 빠르게 조회하기 위해서 인덱스 키를 기준으로 정렬해 놓은 데이터이다.
- 그런데 인덱스는 기본적으로 변형이라는 것이 발생하면 인덱스를 사용할 수 없다. 물론 예외적인 것도 있다.
- 따라서 인덱스가 있어도 인덱스 컬럼에 형변환이 발생하면 인덱스를 사용할 수 없다.
SELECT *
FROM EMP
WHERE
(1) EMPNO = (2) '100';
(1) EMP 테이블을 생성할 때 숫자형 데이터 타입으로 생성했다.
(2) 문자형 데이터 타입 '100'이다. 따라서 암시적 형변환이 발생한다.
- EMPNO 컬럼은 숫자형 타입이고 기본키이므로 자동으로 인덱스가 있다.
- 하지만 암시적 형변환으로 TO_CHAR(EMPNO)로 변환되므로 인덱스를 사용할 수 없다.
- 이와 같은 문제는 명시적 형변환을 사용하면 된다.
- 즉, WHERE EMPNO = TO_NUMBER('100')으로 하면 EMPNO 컬럼이 변환되지 않아서 인덱스를 사용할 수 있다.
문제
다음 중 형변환에 대한 설명으로 올바르지 않은 것은?
(1) TO_NUMBER() 함수는 문자열을 숫자로 변환한다.
(2) TO_CHAR 함수는 숫자형과 날짜형을 문자로 변환한다.
(3) TO_DATE 함수는 문자열을 날짜형으로 변환한다.
(4) 명시적 형변환은 형변환 함수를 사용하지 않고 데이터베이스 관리 시스템에서 내부적으로 형변환을 수행한다.
정답 : (4)
- 암시적 형변환은 SQL 개발자가 형변환을 수행하지 않았을 경우 데이터베이스 관리 시스템이 내부적으로 형변환을 수행하는 것이고 명시적 형변환은 SQL 개발자가 형변환 함수를 사용해서 형변환을 수행하는 것이다.