Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL REPLACE() 함수로 열 값의 특수 문자 일괄 대체하기

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() 함수를 활용하는 것도 좋은 방법입니다.