CS/DB

[혼공SQL] 데이터의 형 변환

F12:) 2024. 1. 15. 23:32

 

   데이터의 형변환

데이터베이스의 데이터 타입 중 문자형을 정수형으로 바꾸거나 정수형을 문자형으로 바꾸는 것처럼 데이터의 형을 변경하는 행위를 형 변환이라고 합니다.

 

형 변환에는 함수를 사용해 직접 데이터의 타입을 변경하는 명시적 형 변환별도의 작업 없이 자연스럽게 변환되는 암시적 형 변환이 있습니다. 이 두 가지에 대해서 알아봅시다.

 

 

   명시적 형 변환

명시적 형 변환에서는 CAST()CONVERT() 함수를 사용하여 데이터의 형 변환을 수행할 수 있습니다.

 

두 함수는 아래와 같이 사용할 수 있습니다.

CAST(값 AS 데이터 형식[(길이)])
CONVERT(값, 데이터 형식[(길이)])

 

실제 사용되는 경우를 확인해봅시다.

 

SELECT AVC(price) AS '평균 가격' FROM buy;
-- 수행 결과 : 142.91

 

위와 같이 어떤 테이블에서 평균을 찾아냅니다. 그런데 이 값은 가격을 의미하므로 실수 형태가 딱히 필요하지 않아 보입니다. 이 때, 수행 결과를 정수형으로 변경해봅시다.

 

SELECT CAST(AVC(price) AS SIGNED) '평균 가격' FROM buy;
-- 또는
SELECT CONVERT(AVC(price), SIGNED) '평균 가격' FROM buy;

-- 수행 결과 : 143

여기서  SIGNED는 SIGNED INT이고, UNSIGNED는 UNSIGNED INT를 의미합니다.

 

 

이번에는 DATE, DATETIEM, TIME 형식으로 형 변환을 해봅시다. 이는 구분자를 인식하여 자동으로 변환해줄 수 있습니다.

SELECT CAST('2022$12$12' AS DATE);
SELECT CAST('2022/12/12' AS DATE);
SELECT CAST('2022%12%12' AS DATE);
SELECT CAST('2022@12@12' AS DATE);
-- 수행 결과 : 2020-12-12

 

 

   암시적 형 변환

자동으로 형 변환되는 암시적 형 변환은 문자열끼리의 덧셈에서 알아서 숫자로 바뀌어서 더해주는 것들이 이에 해당합니다.

 

SELECT '100' + '200';
-- 수행 결과 : 300

 

문자 데이터인 '100'과 '200'이 + 연산에 의해 자동으로 INT 타입으로 바뀐 것입니다.

 

그렇다면 100200을 출력하기 위해서는 어떻게 해야할까요?? 이 때는 + 연산이 아닌 CONCAT을 이용합니다.

SELECT CONCAT('100', '200');
-- 수행결과 : 100200

 

 

그렇다면 문자형과 숫자형을 섞어쓰면 어떻게 될까요?? 바로 확인해봅시다.

SELECT CONCAT(100, '200');
-- 수행 결과 : 100200

SELECt 100 + '200';
-- 수행 결과 : 300