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

MySQL REGEXP로 열 값이 문자열인지 숫자인지 확인하는 방법

MySQL에서 열 값이 문자열인지 숫자인지 확인하는 방법

MySQL에서 특정 열의 값이 순수하게 문자열로만 이루어져 있는지, 아니면 숫자로만 구성되어 있는지 확인해야 할 때가 있습니다. 이런 경우 REGEXP(정규 표현식) 연산자를 활용하면 손쉽게 원하는 데이터만 조회할 수 있습니다.

기본 문법

문자열 값만 조회하려면 다음과 같은 쿼리를 사용합니다.

select *from yourTableName where yourColumnName NOT regexp '^[0-9]+$';

반대로 숫자 값만 조회하려면 아래와 같이 작성합니다.

select *from yourTableName where yourColumnName regexp '^[0-9]+$';

여기서 '^[0-9]+$'는 "문자열 전체가 0부터 9까지의 숫자로만 이루어져 있다"는 의미의 정규 표현식입니다. 앞에 NOT을 붙이면 그 반대 조건, 즉 숫자가 아닌 값(문자열)만 걸러냅니다.

예제 테이블 생성

먼저 실습용 테이블을 만들어 보겠습니다.

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

insert 명령으로 몇 개의 레코드를 삽입합니다.

mysql> insert into DemoTable values('1000');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Carol_Smith');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('2000');
Query OK, 1 row affected (0.10 sec)

select 문으로 테이블의 모든 레코드를 확인해 보겠습니다.

mysql> select *from DemoTable;

위 쿼리는 다음과 같은 결과를 출력합니다.

+-------------+
| Id |
+-------------+
| 1000 |
| John |
| Carol_Smith |
| 2000 |
+-------------+
4 rows in set (0.00 sec)

CASE 1: 문자열 값만 조회하기

숫자가 아닌 문자열 값만 가져오려면 다음 쿼리를 사용합니다.

mysql> select *from DemoTable where Id NOT regexp '^[0-9]+$';

실행 결과, 문자열로 된 열 값만 출력됩니다.

+-------------+
| Id |
+-------------+
| John |
| Carol_Smith |
+-------------+
2 rows in set (0.00 sec)

CASE 2: 숫자 값만 조회하기

반대로 숫자로만 이루어진 값만 가져오려면 아래 쿼리를 실행합니다.

mysql> select *from DemoTable where Id regexp '^[0-9]+$';

실행 결과, 숫자로 된 열 값만 출력됩니다.

+------+
| Id |
+------+
| 1000 |
| 2000 |
+------+
2 rows in set (0.00 sec)

정리

REGEXP 연산자와 정규 표현식 '^[0-9]+$'를 조합하면 열 값이 숫자인지 문자열인지 간편하게 필터링할 수 있습니다. NOT 연산자의 사용 여부에 따라 원하는 데이터 유형을 선택적으로 조회할 수 있으므로, 데이터 검증이나 데이터 클렌징 작업 시 유용하게 활용해 보시기 바랍니다.