MySQL에서 문자열 안에 숫자가 포함되어 있는지 확인하려면 REGEXP 연산자와 문자 클래스 패턴을 조합하여 사용할 수 있습니다. MySQL의 정규식은 POSIX 방식을 따르기 때문에 일반적으로 쓰이는 \d 대신 [0-9] 또는 [[:digit:]] 패턴을 사용하는 것이 좋습니다.
기본 문법
특정 컬럼 값에 숫자가 하나라도 포함된 행을 조회하는 기본 문법은 다음과 같습니다.
select * from yourTableName where yourColumnName regexp '[0-9]';
예제 테이블 생성
문법을 이해하기 위해 먼저 테스트용 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1841 ( Code varchar(20) ); Query OK, 0 rows affected (0.00 sec)
샘플 데이터 삽입
INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다. 숫자가 포함된 값과 그렇지 않은 값을 섞어서 넣습니다.
mysql> insert into DemoTable1841 values('John231');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1841 values('19876Sam');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1841 values('Carol');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1841 values('67474');
Query OK, 1 row affected (0.00 sec)전체 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1841;
실행 결과는 다음과 같습니다.
+----------+ | Code | +----------+ | John231 | | 19876Sam | | Carol | | 67474 | +----------+ 4 rows in set (0.00 sec)
정규식으로 숫자가 포함된 행 조회하기
이제 문자열에 숫자가 포함된 행만 추출하는 정규식 쿼리를 실행해 보겠습니다.
mysql> select * from DemoTable1841 where Code regexp '[0-9]';
결과를 보면 'Carol'처럼 숫자가 전혀 없는 값은 제외되고, 숫자를 하나라도 포함한 행만 반환됩니다.
+----------+ | Code | +----------+ | John231 | | 19876Sam | | 67474 | +----------+ 3 rows in set (0.00 sec)
참고: [[:digit:]] 패턴 사용하기
[0-9] 대신 POSIX 문자 클래스인 [[:digit:]]를 사용해도 동일한 결과를 얻을 수 있습니다.
mysql> select * from DemoTable1841 where Code regexp '[[:digit:]]';
두 패턴 모두 문자열 내에 숫자가 최소 한 개라도 존재하는지 검사하므로, 상황에 맞게 편리한 방식을 선택하면 됩니다.