MySQL에서 첫 번째 반복 값만 바꾸기
MySQL에서 문자열에 같은 단어가 여러 번 등장할 때, 전체가 아닌 첫 번째 일치 항목만 교체해야 하는 경우가 있습니다. 이럴 때는 REGEXP_REPLACE() 함수를 사용하면 됩니다.
예제 문자열
다음과 같은 문자열이 있다고 가정해 보겠습니다.
This is my first MySQL query. This is the first tutorial. I am learning for the first time.
여기서 특정 단어, 예를 들어 "first"의 첫 번째 등장만 "second"로 바꾸고 싶습니다. 원하는 결과는 다음과 같습니다.
This is my second MySQL query. This is the first tutorial. I am learning for the first time.
1단계: 테이블 생성
먼저 실습용 테이블을 만들어 보겠습니다.
mysql> create table demo26 -> ( -> value text -> ); Query OK, 0 rows affected (2.04 sec)
2단계: 데이터 삽입
INSERT 명령을 사용해 테이블에 레코드를 추가합니다.
mysql> insert into demo26 values('This is my first MySQL query. This is the first tutorial. I am learning for the first time.');
Query OK, 1 row affected (0.10 sec)3단계: 저장된 데이터 확인
SELECT 문으로 테이블의 레코드를 조회합니다.
mysql> select *from demo26;
실행 결과는 다음과 같습니다.
+---------------------------------------------------------------------------------------------+ | value | +---------------------------------------------------------------------------------------------+ | This is my first MySQL query. This is the first tutorial. I am learning for the first time. | +---------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
4단계: REGEXP_REPLACE()로 첫 번째 일치 항목만 교체
다음 쿼리는 문자열에서 첫 번째로 등장하는 "first"만 "second"로 교체합니다.
mysql> update demo26 -> set value = REGEXP_REPLACE(value, 'first', 'second', 1, 1); Query OK, 1 row affected (0.19 sec) Rows matched: 1 Changed: 1 Warnings: 0
REGEXP_REPLACE() 함수의 인자 구성은 다음과 같습니다.
- value: 대상이 되는 원본 문자열(컬럼)
- 'first': 찾을 패턴(정규식)
- 'second': 교체할 문자열
- 1: 검색을 시작할 위치(position)
- 1: 교체할 일치 항목의 순번(occurrence) — 여기서 1은 첫 번째 일치 항목을 의미
5단계: 결과 확인
다시 SELECT 문으로 테이블을 조회해 봅니다.
mysql> select *from demo26;
실행 결과는 다음과 같습니다.
+----------------------------------------------------------------------------------------------+ | value | +----------------------------------------------------------------------------------------------+ | This is my second MySQL query. This is the first tutorial. I am learning for the first time. | +----------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
출력 결과를 보면 세 번 반복된 "first" 중 첫 번째 것만 "second"로 변경되었고, 나머지 두 개는 그대로 유지된 것을 확인할 수 있습니다.
정리
REGEXP_REPLACE(str, pattern, replacement, position, occurrence) 형태로 호출하면 occurrence 값을 지정해 특정 순번의 일치 항목만 선택적으로 교체할 수 있습니다. MySQL 8.0 이상에서 정규식 기반 함수를 지원하므로, 버전을 확인한 후 사용하는 것이 좋습니다.