MySQL에서 문자열 일부 교체하기
MySQL에서는 REPLACE() 함수를 사용하면 문자열의 특정 부분을 간단하게 다른 값으로 바꿀 수 있습니다. 예를 들어 이메일 주소에서 '@' 뒤에 오는 도메인 이름을 다른 도메인으로 변경할 때 유용하게 활용됩니다.
REPLACE 함수의 기본 문법은 다음과 같습니다.
REPLACE(대상_문자열, '찾을_문자열', '교체할_문자열')
그럼 실제 예제를 통해 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> EmailId varchar(30)
-> );
Query OK, 0 rows affected (0.53 sec)
2단계: 데이터 삽입
INSERT 명령을 사용하여 테이블에 샘플 레코드를 추가합니다.
mysql> insert into DemoTable values('John123@example.com');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('John123@gmail.com');
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable values('John123@yahoo.com');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('John123@example.com');
Query OK, 1 row affected (0.10 sec)3단계: 데이터 조회
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+---------------------+
| EmailId |
+---------------------+
| John123@example.com |
| John123@gmail.com |
| John123@yahoo.com |
| John123@example.com |
+---------------------+
4 rows in set (0.00 sec)
4단계: REPLACE() 함수로 문자열 교체
다음은 UPDATE 문과 REPLACE() 함수를 함께 사용하여 문자열의 일부를 교체하는 쿼리입니다.
mysql> update DemoTable
-> set EmailId=replace(EmailId,'John123@example.com','John123@gmail.com');
Query OK, 2 rows affected (0.16 sec)
Rows matched: 4 Changed: 2 Warnings: 0
'example.com'이 포함된 두 개의 레코드가 'gmail.com'으로 변경되었습니다. 결과를 다시 확인해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-------------------+
| EmailId |
+-------------------+
| John123@gmail.com |
| John123@gmail.com |
| John123@yahoo.com |
| John123@gmail.com |
+-------------------+
4 rows in set (0.00 sec)
참고: @ 뒤의 도메인만 선택적으로 교체하기
사용자 아이디(@ 앞부분)는 그대로 두고 도메인 부분만 일괄 변경하고 싶다면 SUBSTRING_INDEX()와 CONCAT() 함수를 조합하면 됩니다.
mysql> update DemoTable
-> set EmailId = concat(substring_index(EmailId,'@',1),'@naver.com')
-> where EmailId like '%@yahoo.com';
위 쿼리는 '@'를 기준으로 앞부분(아이디)을 추출한 뒤 새로운 도메인과 연결하여, yahoo.com 계정만 naver.com으로 변경합니다. WHERE 절을 활용하면 원하는 조건의 레코드만 안전하게 수정할 수 있습니다.