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

MySQL 열에서 괄호로 묶인 후행 숫자 제거하는 방법

개요

MySQL에 저장된 문자열 데이터 끝에 "1stJohn (7)"처럼 괄호로 묶인 숫자가 붙어 있는 경우, 이를 제거하고 이름만 깔끔하게 남기고 싶을 때가 있습니다. 이럴 때 trim() 함수와 substring() 함수를 함께 사용하면 간단하게 해결할 수 있습니다.

예제 테이블 생성

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

mysql> create table DemoTable
(
   Name varchar(100)
);
Query OK, 0 rows affected (0.80 sec)

샘플 데이터 삽입

insert 명령을 사용하여 테이블에 샘플 레코드를 입력합니다. 괄호와 숫자가 붙은 값과 붙지 않은 값을 함께 넣어 비교해 보겠습니다.

mysql> insert into DemoTable values('1stJohn');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('1stJohn (7)');
Query OK, 1 row affected (0.65 sec)
mysql> insert into DemoTable values('2ndSam');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('2ndSam (4)');
Query OK, 1 row affected (0.15 sec)

저장된 데이터 확인

select 문으로 테이블의 전체 레코드를 조회합니다.

mysql> select *from DemoTable;

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

+-------------+
| Name |
+-------------+
| 1stJohn |
| 1stJohn (7) |
| 2ndSam |
| 2ndSam (4) |
+-------------+
4 rows in set (0.00 sec)

괄호로 묶인 후행 숫자 제거 쿼리

다음은 MySQL 열에서 괄호로 묶인 후행 숫자를 제거하는 쿼리입니다.

mysql> select trim(substring(Name, 1, (CHAR_LENGTH(Name) - LOCATE('(', REVERSE(Name))))) AS RemovingTrailingNumbers from DemoTable;

위 쿼리를 실행하면 다음과 같이 괄호와 숫자가 제거된 결과를 확인할 수 있습니다.

+-------------------------+
| RemovingTrailingNumbers |
+-------------------------+
| 1stJohn |
| 1stJohn |
| 2ndSam |
| 2ndSam |
+-------------------------+
4 rows in set (0.00 sec)

쿼리 동작 원리

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

  • REVERSE(Name) : 문자열을 거꾸로 뒤집습니다.
  • LOCATE('(', REVERSE(Name)) : 뒤집힌 문자열에서 여는 괄호의 위치를 찾아, 원본 문자열 기준으로 괄호 부분이 끝에서 얼마나 떨어져 있는지 계산합니다.
  • CHAR_LENGTH(Name) - LOCATE(...) : 전체 길이에서 괄호 부분에 해당하는 길이를 빼면 이름 부분의 길이가 구해집니다.
  • substring(Name, 1, 길이) : 문자열 처음부터 계산된 길이만큼 잘라냅니다.
  • trim() : 잘라낸 결과의 불필요한 공백을 제거합니다.

참고로 괄호가 없는 일반 문자열(예: '1stJohn')에는 LOCATE()가 0을 반환하므로 전체 길이가 그대로 사용되어 원본 값이 변경되지 않고 유지됩니다. 이 방식을 활용하면 UPDATE 문과 결합하여 테이블의 데이터를 한 번에 정리하는 것도 가능합니다.