MySQL에서 REPLACE() 함수를 사용하면 열 값에 포함된 특수 문자나 특정 문자열을 손쉽게 다른 값으로 대체할 수 있습니다. 이번 글에서는 예제 테이블을 직접 만들어 보고, 언더스코어(_)로만 구성된 값을 다른 값으로 일괄 변경하는 과정을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성
먼저 테이블을 생성합니다.
mysql> create table DemoTable1574
-> (
-> StudentCode varchar(20)
-> );
Query OK, 0 rows affected (0.59 sec)2. 레코드 삽입
INSERT 문을 사용하여 테이블에 샘플 데이터를 입력합니다. 여기서는 학생 코드를 저장하는 StudentCode 열에 일반 코드와 언더스코어만 있는 값을 섞어 넣습니다.
mysql> insert into DemoTable1574 values('111_Carol');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1574 values('______');
Query OK, 1 row affected (0.30 sec)
mysql> insert into DemoTable1574 values('David_12345');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1574 values('______');
Query OK, 1 row affected (0.12 sec)3. 현재 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1574;
실행 결과는 다음과 같습니다.
+-------------+ | StudentCode | +-------------+ | 111_Carol | | ______ | | David_12345 | | ______ | +-------------+ 4 rows in set (0.00 sec)
4. REPLACE() 함수로 값 대체하기
REPLACE() 함수는 세 개의 인수를 받습니다. 첫 번째는 대상 열(또는 문자열), 두 번째는 찾을 문자열, 세 번째는 교체할 문자열입니다. 아래 쿼리는 '______' 값을 'Mike_007'로 일괄 변경합니다.
mysql> update DemoTable1574 set StudentCode=replace(StudentCode,'______','Mike_007'); Query OK, 2 rows affected (0.38 sec) Rows matched: 4 Changed: 2 Warnings: 0
실행 결과를 보면 전체 4개 행 중 실제로 변경된 행은 2개입니다. 즉, WHERE 절 없이도 대상 문자열이 포함된 행만 자동으로 골라내어 수정됩니다.
5. 변경 결과 확인
테이블을 다시 조회해 변경 내용을 확인합니다.
mysql> select * from DemoTable1574;
실행 결과는 다음과 같습니다.
+-------------+ | StudentCode | +-------------+ | 111_Carol | | Mike_007 | | David_12345 | | Mike_007 | +-------------+ 4 rows in set (0.00 sec)
언더스코어로만 구성되었던 두 개의 값이 모두 'Mike_007'로 바뀐 것을 확인할 수 있습니다. 이처럼 UPDATE 문과 REPLACE() 함수를 함께 사용하면 특정 패턴의 문자열이 들어 있는 행만 선별하여 한 번에 수정할 수 있어 데이터 정제 작업에 매우 유용합니다.
참고로 MySQL의 REPLACE() 함수는 대소문자를 구분하며, 더 복잡한 패턴 매칭이 필요하다면 MySQL 8.0부터 제공되는 REGEXP_REPLACE() 함수를 활용하는 것도 좋은 방법입니다.