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

MySQL에서 대괄호([]) 사이의 텍스트 제거하는 방법

데이터베이스 작업을 하다 보면 이름이나 설명 필드에 [John], [Miller]처럼 대괄호로 묶인 불필요한 텍스트가 섞여 있는 경우가 있습니다. 이번 글에서는 MySQL의 LOCATE(), SUBSTRING(), REPLACE() 함수를 조합하여 대괄호와 그 안의 내용을 한 번에 제거하는 방법을 알아보겠습니다.

1. 샘플 테이블 생성

먼저 실습에 사용할 테이블을 생성합니다.

mysql> create table DemoTable
-> (
-> Name text
-> );
Query OK, 0 rows affected (0.47 sec)

2. 테스트 데이터 삽입

INSERT 문을 사용하여 대괄호가 포함된 이름 데이터를 입력합니다.

mysql> insert into DemoTable values('John [John] Smith');
Query OK, 1 row affected (0.30 sec)
mysql> insert into DemoTable values('[Carol] Carol Taylor');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('David [Miller] Miller');
Query OK, 1 row affected (0.14 sec)

3. 현재 저장된 데이터 확인

SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+-----------------------+
| Name |
+-----------------------+
| John [John] Smith |
| [Carol] Carol Taylor |
| David [Miller] Miller |
+-----------------------+
3 rows in set (0.00 sec)

각 행마다 대괄호의 위치가 앞, 중간 등 서로 다르게 들어가 있는 것을 확인할 수 있습니다.

4. 대괄호 사이의 텍스트를 제거하는 쿼리

다음 쿼리를 실행하면 대괄호([ ])와 그 안의 텍스트가 모두 제거됩니다.

mysql> select replace(Name,substring(Name,locate('[', Name), LENGTH(Name)
-> - locate(']', reverse(Name)) - locate('[', Name) + 2), '') as Name
-> from DemoTable;

실행 결과:

+---------------+
| Name |
+---------------+
| John Smith |
| Carol Taylor |
| David Miller |
+---------------+
3 rows in set (0.03 sec)

모든 행에서 대괄호와 그 안의 내용이 깔끔하게 제거되었습니다.

5. 쿼리 동작 원리 살펴보기

이 쿼리가 어떻게 작동하는지 단계별로 분석해 보겠습니다.

  • locate('[', Name) : 문자열에서 여는 대괄호 [가 시작되는 위치를 찾습니다.
  • locate(']', reverse(Name)) : 문자열을 뒤집은 후 ]의 위치를 찾습니다. 이 값은 원본 문자열 기준으로 닫는 대괄호가 끝에서부터 몇 번째에 있는지를 나타냅니다.
  • LENGTH(Name) - locate(']', reverse(Name)) - locate('[', Name) + 2 : 위 두 값을 조합하여 대괄호 전체(여는 괄호부터 닫는 괄호까지)의 길이를 계산합니다. +2는 양쪽 대괄호 자체를 포함시키기 위한 보정값입니다.
  • SUBSTRING(...) : 계산된 위치와 길이를 바탕으로 [John]처럼 대괄호로 묶인 부분 문자열을 추출합니다.
  • REPLACE(Name, ..., '') : 추출한 부분 문자열을 빈 문자열('')로 치환하여 최종적으로 제거합니다.

마무리

MySQL에는 정규식 치환 함수가 기본적으로 제공되지 않기 때문에(MariaDB의 REGEXP_REPLACE 제외), 문자열 함수들을 조합하는 것이 일반적인 해결 방법입니다. 위 방식은 대괄호가 문자열 어디에 위치하든 동작하므로, 데이터 정제(cleansing) 작업에서 유용하게 활용할 수 있습니다. 다만 한 문자열 안에 대괄호가 두 개 이상 있는 경우에는 추가적인 처리 로직이 필요하다는 점을 참고하세요.