MySQL REPLACE() 함수로 여러 레코드의 문자열 대체하기
여러 레코드에 저장된 문자열을 한 번에 대체하려면 REPLACE() 함수의 첫 번째 인수, 즉 원래 대상 문자열이 위치하는 자리에 열(컬럼) 이름을 지정해야 합니다. 이렇게 하면 해당 열에 포함된 모든 부분 문자열이 지정한 새 문자열로 일괄 치환됩니다.
REPLACE() 함수의 기본 구문은 다음과 같습니다.
REPLACE(대상_문자열, 찾을_문자열, 바꿀_문자열)
또한 UPDATE 문과 WHERE 절을 함께 사용하면 특정 조건을 만족하는 레코드에만 대체 작업을 적용할 수 있어 더욱 정교한 데이터 수정이 가능합니다. 다음 예제를 통해 살펴보겠습니다.
예제
mysql> Update Student set Name = REPLACE(Name, 'G','S') WHERE Subject LIKE '%Comp%';
Query OK, 2 rows affected (0.08 sec)
Rows matched: 2 Changed: 2 Warnings: 0
위 쿼리는 Student 테이블에서 Subject 값에 'Comp'가 포함된 레코드만 대상으로, Name 열에 있는 문자 'G'를 'S'로 모두 바꾸는 작업을 수행합니다. 실행 결과 두 개의 행이 성공적으로 변경되었습니다.
업데이트 후 테이블 내용을 조회하면 다음과 같습니다.
mysql> Select Name, Subject from Student;
+---------+-----------+
| Name | Subject |
+---------+-----------+
| Saurav | Computers |
| Aarav | History |
| Harshit | Commerce |
| Saurav | Computers |
| Yashraj | Math |
+---------+-----------+
5 rows in set (0.00 sec)
결과를 보면 WHERE 조건(Subject에 'Comp' 포함)에 해당하는 레코드의 Name 값에서 'G'가 'S'로 치환된 것을 확인할 수 있습니다. 반면 History, Math처럼 조건에 맞지 않는 과목의 레코드는 영향을 받지 않고 그대로 유지됩니다.
이처럼 REPLACE() 함수를 UPDATE 문과 조합하면 별도의 애플리케이션 로직 없이도 SQL 문 하나만으로 여러 레코드의 문자열을 손쉽게 일괄 수정할 수 있습니다. 대량의 데이터를 정리하거나 잘못 입력된 값을 수정할 때 매우 유용한 방법입니다.