네, 가능합니다. CONCAT, LEFT, REPEAT, CHAR_LENGTH 함수를 조합하면 첫 번째 숫자는 그대로 유지하면서 나머지 모든 숫자를 0으로 바꿀 수 있습니다.
먼저 예제 테이블을 생성해 보겠습니다.
mysql> create table DemoTable744 (Number varchar(100)); Query OK, 0 rows affected (0.47 sec)
샘플 데이터 삽입하기
insert 명령을 사용하여 테이블에 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable744 values('537737736252');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable744 values('989000099999');
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable744 values('343225666666664533');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable744 values('4322111899494');
Query OK, 1 row affected (0.15 sec)테이블 데이터 확인하기
select 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable744;
위 쿼리는 다음과 같은 결과를 출력합니다.
+--------------------+ | Number | +--------------------+ | 537737736252 | | 989000099999 | | 343225666666664533 | | 4322111899494 | +--------------------+ 4 rows in set (0.00 sec)
첫 자리 숫자만 남기고 나머지를 0으로 변환하는 쿼리
다음은 첫 번째 숫자를 제외한 나머지 숫자를 모두 0으로 바꾸는 쿼리입니다.
mysql> select CONCAT(LEFT(Number, 1), REPEAT('0', CHAR_LENGTH(Number) - 1))
AS AfterAddingZero from DemoTable744;실행 결과는 아래와 같습니다.
+--------------------+ | AfterAddingZero | +--------------------+ | 500000000000 | | 900000000000 | | 300000000000000000 | | 4000000000000 | +--------------------+ 4 rows in set (0.06 sec)
쿼리 동작 원리
이 쿼리가 작동하는 방식을 단계별로 살펴보면 다음과 같습니다.
LEFT(Number, 1): 문자열에서 맨 앞의 한 글자만 추출하여 원래 첫 자리 숫자를 그대로 유지합니다.
CHAR_LENGTH(Number) - 1: 전체 문자열 길이에서 1을 뺀 값, 즉 0으로 채워야 할 자릿수를 계산합니다.
REPEAT('0', n): 계산된 자릿수만큼 '0'을 반복 생성합니다.
CONCAT(...): 추출한 첫 자리 숫자와 반복된 0들을 하나의 문자열로 연결합니다.
이 방법은 데이터 타입이 varchar인 경우에도 안전하게 동작하며, 자릿수가 서로 다른 값들이 섞여 있어도 각 행의 길이에 맞춰 정확하게 처리됩니다.