MySQL 문자열에서 특정 문자 변경하기
MySQL에서 문자열의 특정 위치에 있는 문자를 다른 문자로 바꾸고 싶다면 CONCAT() 함수와 SUBSTRING() 함수를 함께 사용하면 됩니다. 이 두 함수를 조합하면 문자열을 원하는 위치를 기준으로 나눈 뒤, 그 사이에 새로운 문자를 삽입하는 방식으로 손쉽게 특정 문자를 교체할 수 있습니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Value varchar(200)
);
Query OK, 0 rows affected (0.60 sec)샘플 데이터 삽입
INSERT 명령을 사용해 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable(Value) values('98764');
Query OK, 1 row affected (0.17 sec)저장된 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+----+-------+ | Id | Value | +----+-------+ | 1 | 98764 | +----+-------+ 1 row in set (0.00 sec)
특정 문자를 변경하는 쿼리
이제 문자열에서 특정 문자를 변경하는 쿼리를 살펴보겠습니다. 아래 예제에서는 '98764'라는 값에서 네 번째 자리에 있던 숫자 '6'을 'X'로 바꾸는 작업을 수행합니다.
mysql> select concat(substring(Value,1,3),'X',substring(Value,5)) from DemoTable;
실행 결과는 다음과 같습니다.
+-----------------------------------------------------+ | concat(substring(Value,1,3),'X',substring(Value,5)) | +-----------------------------------------------------+ | 987X4 | +-----------------------------------------------------+ 1 row in set (0.00 sec)
쿼리 동작 원리
이 쿼리가 어떻게 동작하는지 단계별로 살펴보겠습니다.
1. substring(Value, 1, 3) : 첫 번째 문자부터 세 글자, 즉 '987'을 추출합니다.
2. 'X' : 추출한 문자열 뒤에 새로운 문자 'X'를 붙입니다.
3. substring(Value, 5) : 다섯 번째 문자부터 끝까지, 즉 '4'를 추출하여 이어 붙입니다.
세 부분이 CONCAT() 함수로 하나로 합쳐지면서 최종적으로 '987X4'라는 결과가 만들어집니다. 이처럼 SUBSTRING()으로 잘라낸 문자열 조각들 사이에 원하는 문자를 삽입하면, UPDATE 문 없이도 SELECT 단계에서 특정 위치의 문자를 자유롭게 변경할 수 있습니다.
참고로 실제 테이블의 값을 영구적으로 변경하고 싶다면, 위 SELECT 쿼리를 응용하여 다음과 같이 UPDATE 문에 적용할 수 있습니다.
mysql> update DemoTable
-> set Value = concat(substring(Value,1,3),'X',substring(Value,5));
Query OK, 1 row affected (0.10 sec)
Rows matched: 1 Changed: 1 Warnings: 0