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 연산자의 사용 여부에 따라 원하는 데이터 유형을 선택적으로 조회할 수 있으므로, 데이터 검증이나 데이터 클렌징 작업 시 유용하게 활용해 보시기 바랍니다.