REGEXP를 사용하여 숫자만 가져오려면 where 절에 다음 정규식( ^[0-9]*$)을 사용하십시오.
사례 1 − 정확히 10자리 숫자만 있고 모두 숫자여야 하는 행만 원하면 아래 정규식을 사용하십시오.
SELECT *FROM yourTableName WHERE yourColumnName REGEXP '^[0-9]{10}$';
사례 2 − 숫자가 1 이상인 행만 원하는 경우 다음 구문은 −
입니다.SELECT *FROM yourTableName WHERE yourColumnName REGEXP '^[0-9]*$';
위의 구문은 문자가 없는 행만 제공합니다.
위의 구문을 이해하기 위해 테이블을 생성해 보겠습니다. 테이블을 생성하는 쿼리는 다음과 같습니다 -
mysql> insert into OnlyDigits(UserId, UserName) values('123User1','John'); Query OK, 1 row affected (0.16 sec) mysql> insert into OnlyDigits(UserId, UserName) values('3445User2','Carol'); Query OK, 1 row affected (0.19 sec) mysql> insert into OnlyDigits(UserId, UserName) values('145363User3','Mike'); Query OK, 1 row affected (0.20 sec) mysql> insert into OnlyDigits(UserId, UserName) values('13455User4','Larry'); Query OK, 1 row affected (0.22 sec) mysql> insert into OnlyDigits(UserId, UserName) values('123555User5','Sam'); Query OK, 1 row affected (0.15 sec) mysql> insert into OnlyDigits(UserId, UserName) values('596766User6','David'); Query OK, 1 row affected (0.24 sec) mysql> insert into OnlyDigits(UserId, UserName) values('96977User7','Robert'); Query OK, 1 row affected (0.15 sec) mysql> insert into OnlyDigits(UserId, UserName) values('99999User8','James'); Query OK, 1 row affected (0.20 sec) mysql> insert into OnlyDigits(UserId, UserName) values('9999999','James'); Query OK, 1 row affected (0.13 sec) mysql> insert into OnlyDigits(UserId, UserName) values('153545','Maxwell'); Query OK, 1 row affected (0.23 sec) mysql> insert into OnlyDigits(UserId, UserName) values('9999986787','Johnson'); Query OK, 1 row affected (0.20 sec)
이제 select 문을 사용하여 테이블의 모든 레코드를 표시할 수 있습니다. 쿼리는 다음과 같습니다 -
mysql> select *from OnlyDigits;
다음은 출력입니다 -
+----+-------------+----------+ | Id | UserId | UserName | +----+-------------+----------+ | 1 | 123User1 | John | | 2 | 3445User2 | Carol | | 3 | 145363User3 | Mike | | 4 | 13455User4 | Larry | | 5 | 123555User5 | Sam | | 6 | 596766User6 | David | | 7 | 96977User7 | Robert | | 8 | 99999User8 | James | | 9 | 9999999 | James | | 10 | 153545 | Maxwell | | 11 | 9999986787 | Johnson | +----+-------------+----------+ 11 rows in set (0.00 sec)
사례 1 - 다음은 문자열에서 정확히 10자리를 원하고 모두 숫자여야 할 때 정규식을 사용한 쿼리입니다.
mysql> select *from OnlyDigits -> where UserId REGEXP '^[0-9]{10}$';
다음은 출력입니다 -
+----+------------+----------+ | Id | UserId | UserName | +----+------------+----------+ | 11 | 9999986787 | Johnson | +----+------------+----------+ 1 row in set (0.00 sec)
사례 1의 대체 정규식. 쿼리는 다음과 같습니다.
mysql> select *from OnlyDigits -> where UserId REGEXP '^[[:digit:]]{10}$';
다음은 출력입니다 -
+----+------------+----------+ | Id | UserId | UserName | +----+------------+----------+ | 11 | 9999986787 | Johnson | +----+------------+----------+ 1 row in set (0.00 sec)
사례 2 − 하나 이상의 숫자가 있는 행만 원하는 경우(숫자만). 쿼리는 다음과 같습니다.
mysql> select *from OnlyDigits -> where UserId REGEXP'^[0-9]*$';
다음은 출력입니다.
+----+------------+----------+ | Id | UserId | UserName | +----+------------+----------+ | 9 | 9999999 | James | | 10 | 153545 | Maxwell | | 11 | 9999986787 | Johnson | +----+------------+----------+ 3 rows in set (0.00 sec)