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

MySQL REGEXP로 문자열·숫자·특수 문자가 섞인 열 값 조건부 업데이트하기

문자열, 숫자, 특수 문자가 혼합된 열 값 중에서 숫자로만 이루어진 값만 골라 업데이트하려면 UPDATE 명령어와 REGEXP 연산자를 함께 사용하면 됩니다. 아래 예제를 통해 전체 과정을 단계별로 살펴보겠습니다.

1. 테이블 생성

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

mysql> create table DemoTable2023
    -> (
    -> StreetNumber varchar(100)
    -> );
Query OK, 0 rows affected (0.59 sec)

2. 데이터 삽입

INSERT 명령어로 숫자형 값과 문자열이 포함된 값을 함께 입력합니다.

mysql> insert into DemoTable2023 values('7');
Query OK, 1 row affected (0.17 sec)

mysql> insert into DemoTable2023 values('1');
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable2023 values('AUS-100');
Query OK, 1 row affected (0.15 sec)

mysql> insert into DemoTable2023 values('US-101');
Query OK, 1 row affected (0.11 sec)

3. 전체 데이터 확인

SELECT 문으로 저장된 모든 레코드를 조회합니다.

mysql> select *from DemoTable2023;

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

+--------------+
| StreetNumber |
+--------------+
| 7            |
| 1            |
| AUS-100      |
| US-101       |
+--------------+
4 rows in set (0.00 sec)

4. REGEXP를 활용한 UPDATE 쿼리

정규식 조건에 맞는 행만 업데이트하는 쿼리는 다음과 같습니다.

mysql> update DemoTable2023
    -> set StreetNumber=concat('Street',StreetNumber)
    -> where StreetNumber regexp'^[0-9]{1,2}$';
Query OK, 2 rows affected (0.19 sec)
Rows matched: 2 Changed: 2 Warnings: 0

여기서 사용된 정규식 '^[0-9]{1,2}$'의 의미는 다음과 같습니다.

  • ^ : 문자열의 시작을 의미
  • [0-9]{1,2} : 숫자(0~9)가 1자리 또는 2자리로만 구성되어야 함
  • $ : 문자열의 끝을 의미

따라서 '7'과 '1'처럼 오직 숫자로만 이루어진 값만 조건에 해당하고, 'AUS-100'이나 'US-101'처럼 알파벳과 하이픈(-)이 포함된 값은 제외됩니다. 조건에 일치한 두 행은 CONCAT 함수를 통해 앞에 'Street' 접두사가 붙은 형태로 업데이트됩니다.

5. 업데이트 결과 확인

테이블의 레코드를 다시 한번 조회해 결과를 확인합니다.

mysql> select *from DemoTable2023;

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

+--------------+
| StreetNumber |
+--------------+
| Street7      |
| Street1      |
| AUS-100      |
| US-101       |
+--------------+
4 rows in set (0.00 sec)

이처럼 MySQL에서는 WHERE 절과 REGEXP를 조합하면 복잡한 패턴 조건에 맞는 행만 선별적으로 업데이트할 수 있습니다. 숫자, 문자열, 특수 문자가 뒤섞인 데이터를 다룰 때 매우 유용한 기법입니다.