MySQL에서 문자열의 시작 부분에 있는 특정 문자를 검색하여 다른 문자로 교체해야 하는 경우가 종종 있습니다. 이럴 때는 INSERT() 함수를 활용하면 간단하게 처리할 수 있습니다.
이번 글에서는 실제 예제를 통해 우편번호(ZipCode) 데이터의 앞 두 자리를 특정 접두사로 교체하는 방법을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> ZipCode varchar(200)
-> );
Query OK, 0 rows affected (0.47 sec)
2. 샘플 데이터 삽입하기
INSERT 명령을 사용하여 테이블에 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values('9030');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('3902');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('9083');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('9089');
Query OK, 1 row affected (0.13 sec)3. 전체 레코드 조회하기
SELECT 문을 사용하여 테이블에 저장된 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
출력 결과
+---------+
| ZipCode |
+---------+
| 9030 |
| 3902 |
| 9083 |
| 9089 |
+---------+
4 rows in set (0.00 sec)
4. 문자열 시작 부분 검색 후 교체하기
다음은 문자열 시작 부분의 문자를 검색하고 교체하는 쿼리입니다. 여기서는 '90'으로 시작하는 ZipCode 레코드만 대상으로 작업을 수행합니다.
mysql> update DemoTable set ZipCode=INSERT(ZipCode, 1, 2, 'Country-AUS-')
-> where ZipCode LIKE '90%';
Query OK, 3 rows affected (0.26 sec)
Rows matched: 3 Changed: 3 Warnings: 0
위 쿼리에서 INSERT(ZipCode, 1, 2, 'Country-AUS-')의 의미는 다음과 같습니다.
- 첫 번째 인수(ZipCode): 수정 대상이 되는 원본 문자열입니다.
- 두 번째 인수(1): 교체를 시작할 위치로, 문자열의 첫 번째 문자부터 시작한다는 의미입니다.
- 세 번째 인수(2): 교체될 기존 문자의 개수로, 앞의 2글자('90')가 대상이 됩니다.
- 네 번째 인수('Country-AUS-'): 기존 문자를 대신하여 삽입될 새로운 문자열입니다.
즉, '90'으로 시작하는 값은 앞의 '90'이 제거되고 그 자리에 'Country-AUS-'가 들어가게 됩니다.
5. 변경 결과 확인하기
업데이트가 정상적으로 적용되었는지 테이블을 다시 조회해 보겠습니다.
mysql> select *from DemoTable;
출력 결과
+----------------+
| ZipCode |
+----------------+
| Country-AUS-30 |
| 3902 |
| Country-AUS-83 |
| Country-AUS-89 |
+----------------+
4 rows in set (0.00 sec)
정리
결과를 보면 '90'으로 시작했던 세 개의 레코드(9030, 9083, 9089)는 앞 두 자리가 'Country-AUS-'로 교체되어 각각 'Country-AUS-30', 'Country-AUS-83', 'Country-AUS-89'로 변경된 것을 확인할 수 있습니다. 반면 '3902'는 조건(WHERE 절)에 해당하지 않으므로 그대로 유지되었습니다.
이처럼 MySQL의 INSERT() 함수와 LIKE 연산자를 함께 사용하면, 특정 패턴으로 시작하는 문자열의 시작 부분만 손쉽게 검색하여 원하는 값으로 교체할 수 있습니다.