MySQL에서 문자열 중 점(.) 앞부분만 다른 값으로 대체하고 싶다면 CONCAT() 함수와 SUBSTRING_INDEX() 함수를 함께 사용하면 됩니다. 이 두 함수를 조합하면 점 뒤의 소수점 이하 값은 그대로 유지한 채, 점 앞의 정수 부분만 원하는 값으로 손쉽게 변경할 수 있습니다.
1. 테이블 생성하기
먼저 예제로 사용할 테이블을 생성합니다.
mysql> create table DemoTable1424
-> (
-> Value varchar(60)
-> );
Query OK, 0 rows affected (0.56 sec)
2. 샘플 데이터 삽입하기
INSERT 문을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable1424 values('567.78483733');
Query OK, 1 row affected (0.78 sec)
mysql> insert into DemoTable1424 values('1023.45252443');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1424 values('7893322.5635543434');
Query OK, 1 row affected (0.35 sec)
mysql> insert into DemoTable1424 values('90944.665665');
Query OK, 1 row affected (0.14 sec)3. 현재 데이터 확인하기
SELECT 문으로 저장된 전체 레코드를 조회합니다.
mysql> select * from DemoTable1424;
위 쿼리는 아래와 같은 결과를 출력합니다.
+--------------------+
| Value |
+--------------------+
| 567.78483733 |
| 1023.45252443 |
| 7893322.5635543434 |
| 90944.665665 |
+--------------------+
4 rows in set (0.00 sec)
4. 점 앞의 문자열 대체하기
핵심은 UPDATE 문입니다. SUBSTRING_INDEX(Value, '.', -1)은 점(.)을 기준으로 뒤쪽(-1)에 위치한 부분, 즉 소수점 이하 값을 추출합니다. 여기에 CONCAT()으로 새로운 접두사 '10000.'을 붙여주면 점 앞부분만 대체됩니다.
mysql> update DemoTable1424
-> set Value=concat('10000.',substring_index(Value ,'.',-1));
Query OK, 4 rows affected (0.13 sec)
Rows matched: 4 Changed: 4 Warnings: 0
5. 변경 결과 확인하기
테이블을 다시 조회해 업데이트가 정상적으로 적용되었는지 확인합니다.
mysql> select * from DemoTable1424;
모든 행에서 점 앞의 값이 '10000'으로 바뀌고, 점 뒤의 기존 값은 그대로 유지된 것을 확인할 수 있습니다.
+------------------+
| Value |
+------------------+
| 10000.78483733 |
| 10000.45252443 |
| 10000.5635543434 |
| 10000.665665 |
+------------------+
4 rows in set (0.00 sec)
정리
SUBSTRING_INDEX(컬럼명, '.', -1)은 구분자를 기준으로 오른쪽 끝 값을 반환하고, 양수를 지정하면 왼쪽 값을 반환합니다. 이를 CONCAT()과 조합하면 특정 구분자 앞이나 뒤의 문자열만 자유롭게 치환할 수 있어, 숫자 포맷 일괄 변경이나 데이터 정제 작업에 매우 유용하게 활용할 수 있습니다.