티스토리 뷰

반응형

안녕하세요, 끙정입니다.

 

오늘은 데이터 타입 변환 함수에 대해서 알아보겠습니다.

 

DBMS의 필드나 변수는 저마다 고유의 데이터 타입이 있고 타입에 따라 연산 방식이 달라집니다.

아래 사진은 오라클과 SQL Server에서 각각 똑같은 쿼리를 실행한 결과입니다.

 

수치는 신경쓰지 말자...

 

오라클은 모든 수치를 실수로 취급하기 때문에 평균도 실수로 계산합니다.

반면에 SQL Server는 popu가 정수타입이니 평균도 정수까지만 계산합니다.

만일 원하는 결과가 따로 있다면 데이터의 타입을 강제로 바꿔야 합니다.

 

1. CAST

 

CAST(필드 AS 타입)

 

CAST 연산자는 필드(또는 변수)의 타입을 강제 변환합니다.

 

/* Oracle */
SELECT CAST(AVG(popu) AS INT) FROM tCity;
/* 계산 결과를 INT형으로 변환하여 출력 */

/* SQL Server */
SELECT AVG(CAST(popu AS decimal)) FROM tCity;
/* 정수형 popu를 decimal로 바꿔서 AVG를 계산 */

 

 

원칙적으로 연산자의 양변은 같은 타입이어야 자연스럽고 말썽이 없습니다.

그러나 암묵적으로 타입을 바꿔 주는 경우가 많아 강제 변환이 필요한 경우가 그리 많지 않습니다.

 

 

'12'는 문자열이고, 34는 수치형입니다.

그런데 숫자끼리 더하는 + 연산자를 통해 '12'를 수치형으로 변환합니다.

반면에 문자열끼리 연결하는 || 연산자는 34를 문자열로 변환합니다.

 

그러나 SQL Server는 + 연산자로 숫자도 더하고 문자열도 연결하기 때문에 헷갈려할 수 있습니다.

그래서 수치형을 우선으로 하여 덧셈을 수행합니다.

문자열을 의도했다면 형변환을 해주거나 CONCAT 함수를 사용해야 합니다.

 

SELECT '12' + 34;

SELECT '12' + CAST(34 AS VARCHAR(10));

SELECT CONCAT('12', 34);

 

 

2. TO_CHAR, TO_NUMBER, CONVERT

 

표준 타입 변환 함수인 CAST 외에도 DBMS별로 고유한 타입 변환 함수를 지원합니다.

오라클은 수치와 문자열을 변환할 떄 다음 두 함수를 사용합니다.

 

TO_CHAR(숫자, 포맷)
TO_NUMBER(포맷, 포맷)

 

TO_CHAR 함수는 단순히 타입만 바꾸는 것이 아니라 포맷에 따라 출력 형식을 조정합니다.

포맷에는 9와 0으로 숫자 자리를 표기하되 9에 대응되는 자리수가 없으면 공백으로 치환하고 0은 0으로 치환합니다.

공백까지 제거하려면 포맷 선두에 FM을 붙입니다.

 

SELECT TO_CHAR(12345) FROM dual;		/* 12345 */
SELECT TO_CHAR(12345, '999,999') FROM dual;	/* 12,345 */
SELECT TO_CHAR(12345, 'FM999,999') FROM dual;	/*12,345 */
SELECT TO_CHAR(12345, '000,999') FROM dual;	/* 012,345 */

 

 

TO_NUMBER는 문자열을 숫자로 바꾸는데, 암묵적 변환이 잘 동작되기 때문에 쓸 일이 많지는 않습니다.

다만 서식이 있는 숫자를 읽을 때는 꼭 필요합니다.

 

SELECT TO_NUMBER('12,345') FROM dual; /* 에러가 난다. */
SELECT TO_NUMBER('12,345', '999,999') FROM dual;

 

 

SQL Server는 CAST외에 CONVERT 함수를 제공합니다.

CAST와 사실상 같은 함수이지만 인수의 순서가 반대로 되어 있고 스타일을 추가로 지정할 수 있다는 차이가 있습니다.

 

CONVERT(타입, 값, [스타일])

 

SELECT '응답하라' + CONVERT(VARCHAR(10), 1989);

 

 

그러나 CAST 함수가 도입된 이후로는 잘 쓰지 않는 추세입니다.

 

 

그만 알아보겠습니다.

 

 

출처

http://www.yes24.com/Product/Goods/101637633?OzSrank=1

 

김상형의 SQL 정복 : 소문난 명강의 (무료특별판) - YES24

DBMS에 제약 없이 SQL을 활용한다!핵심 원리를 알려주는 SQL 바이블 DBMS 제품이나 개발툴이 아닌 SQL 언어 그 자체를 배우는 바이블 도서다. 특정 DBMS에 종속적인 사용법보다는 표준화된 데이터 관리

www.yes24.com

 

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함