Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

MySQL에서 regexp를 사용하여 숫자만 가져오시겠습니까?


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)