문자열, 숫자, 특수 문자가 혼합된 열 값 중에서 숫자로만 이루어진 값만 골라 업데이트하려면 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를 조합하면 복잡한 패턴 조건에 맞는 행만 선별적으로 업데이트할 수 있습니다. 숫자, 문자열, 특수 문자가 뒤섞인 데이터를 다룰 때 매우 유용한 기법입니다.