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

MySQL REGEXP_REPLACE()로 문자열에서 첫 번째 일치 항목만 교체하는 방법

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 이상에서 정규식 기반 함수를 지원하므로, 버전을 확인한 후 사용하는 것이 좋습니다.