VARCHAR 타입으로 저장된 숫자 데이터를 부호 없는 정수(UNSIGNED INTEGER)로 변환해야 하는 경우가 종종 있습니다. 문자열 형태로 저장된 숫자를 올바르게 정렬하거나 수치 연산에 활용하려면 타입 변환이 필수적입니다. 이때 MySQL의 CAST() 함수를 사용하면 간단하게 해결할 수 있습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable868(Amount varchar(100));
Query OK, 0 rows affected (0.51 sec)
2. 데이터 삽입하기
INSERT 명령어를 사용하여 테이블에 샘플 레코드를 추가합니다.
mysql> insert into DemoTable868 values('781');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable868 values('990');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable868 values('1002');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable868 values('560');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable868 values('890');
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable868 values('9890');
Query OK, 1 row affected (0.06 sec)
mysql> insert into DemoTable868 values('8723');
Query OK, 1 row affected (0.16 sec)3. 저장된 데이터 확인하기
SELECT 문을 사용하여 테이블에 저장된 모든 레코드를 조회합니다.
mysql> select *from DemoTable868;
실행 결과는 다음과 같습니다.
+--------+
| Amount |
+--------+
| 781 |
| 990 |
| 1002 |
| 560 |
| 890 |
| 9890 |
| 8723 |
+--------+
7 rows in set (0.00 sec)
4. CAST() 함수로 UNSIGNED 정수 변환하기
다음은 CAST() 함수를 사용하여 VARCHAR 값을 부호 없는 정수로 변환하고, 내림차순으로 정렬하는 쿼리입니다.
mysql> select cast(Amount as unsigned) AS Amount from DemoTable868 order by Amount DESC;
변환 후에는 문자열이 아닌 실제 숫자 기준으로 정렬되므로, '1002'가 '990'보다 앞에 오는 등 올바른 순서로 결과가 출력됩니다.
+--------+
| Amount |
+--------+
| 9890 |
| 8723 |
| 1002 |
| 990 |
| 890 |
| 781 |
| 560 |
+--------+
7 rows in set (0.01 sec)
정리
VARCHAR로 저장된 숫자 데이터는 문자열 기준으로 정렬될 경우 의도와 다른 결과가 나올 수 있습니다. CAST(컬럼명 AS UNSIGNED) 구문을 사용하면 해당 값을 부호 없는 정수로 변환하여 정확한 숫자 비교와 정렬을 수행할 수 있습니다. 참고로 MySQL 8.0 이상에서는 동일한 기능을 하는 CONVERT(Amount, UNSIGNED) 함수도 사용할 수 있습니다.