MySQL에서 문자열 컬럼의 숫자 값만 캐스팅하여 업데이트하는 방법
MySQL에서는 CEIL() 함수와 CAST()를 함께 사용하여 VARCHAR 타입으로 저장된 문자열 값을 숫자로 변환할 수 있습니다. 이 글에서는 문자열 컬럼에 저장된 값을 정수 컬럼으로 캐스팅하고 업데이트하는 과정을 단계별로 살펴보겠습니다.
1. 테이블 생성
먼저 첫 번째 컬럼을 VARCHAR 타입으로 지정하여 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> Value varchar(20),
-> UpdateValue int
-> );
Query OK, 0 rows affected (1.08 sec)
2. 데이터 삽입
INSERT 명령어로 레코드를 추가합니다. 여기에는 숫자 형태의 문자열('100', '1')과 숫자가 아닌 문자열('false', 'true')이 함께 포함되어 있습니다.
mysql> insert into DemoTable(Value) values('100');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(Value) values('false');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable(Value) values('true');
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable(Value) values('1');
Query OK, 1 row affected (0.07 sec)3. 전체 레코드 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-------+-------------+
| Value | UpdateValue |
+-------+-------------+
| 100 | NULL |
| false | NULL |
| true | NULL |
| 1 | NULL |
+-------+-------------+
4 rows in set (0.00 sec)
4. 숫자 값 캐스팅 후 업데이트
다음 쿼리는 문자열 컬럼의 값을 숫자로 캐스팅하여 UpdateValue 컬럼에 반영합니다.
mysql> update DemoTable
-> set UpdateValue=ceil(cast(Value AS char(7)));
Query OK, 4 rows affected (0.18 sec)
Rows matched: 4 Changed: 4 Warnings: 0
5. 결과 확인
업데이트 후 테이블을 다시 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-------+-------------+
| Value | UpdateValue |
+-------+-------------+
| 100 | 100 |
| false | 0 |
| true | 0 |
| 1 | 1 |
+-------+-------------+
4 rows in set (0.00 sec)
동작 원리 및 참고 사항
CEIL(CAST(Value AS CHAR)) 구문은 문자열을 암묵적으로 숫자로 변환한 뒤 올림 처리합니다. MySQL에서는 숫자로 해석할 수 없는 문자열('false', 'true' 등)이 숫자로 변환될 때 0으로 처리되므로, 위 예제에서도 해당 행들은 0으로 업데이트된 것을 확인할 수 있습니다.
반면, 숫자로 변환 가능한 행만 선택적으로 업데이트하고 싶다면 REGEXP를 활용한 WHERE 절을 추가하는 방법도 유용합니다.
mysql> update DemoTable
-> set UpdateValue = ceil(cast(Value AS unsigned))
-> where Value regexp '^[0-9]+$';
Query OK, 2 rows affected (0.05 sec)
Rows matched: 2 Changed: 2 Warnings: 0
이렇게 하면 '100', '1'처럼 실제 숫자인 값만 변환되고, 'false'나 'true' 같은 문자열은 기존 상태 그대로 유지됩니다. 데이터의 특성에 따라 두 가지 방식 중 적절한 방법을 선택하시기 바랍니다.