Computer >> Máy Tính >  >> Lập trình >> MySQL

Chỉ nhận các chữ số bằng cách sử dụng regexp trong MySQL?


Nếu bạn chỉ muốn nhận các chữ số bằng REGEXP, hãy sử dụng biểu thức chính quy sau (^ [0-9] * $) trong mệnh đề where.

Trường hợp 1 - Nếu bạn chỉ muốn những hàng có chính xác 10 chữ số và tất cả chỉ phải là chữ số, hãy sử dụng biểu thức chính quy bên dưới.

SELECT *FROM yourTableName
WHERE yourColumnName REGEXP '^[0-9]{10}$';

Trường hợp 2 - Nếu bạn chỉ muốn những hàng có chữ số 1 hoặc nhiều hơn, thì cú pháp sau đây là -

SELECT *FROM yourTableName
WHERE yourColumnName REGEXP '^[0-9]*$';

Cú pháp trên sẽ chỉ cung cấp cho những hàng không có bất kỳ ký tự nào.

Để hiểu cú pháp trên, chúng ta hãy tạo một bảng. Truy vấn để tạo bảng như sau -

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)

Bây giờ bạn có thể hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng câu lệnh select. Truy vấn như sau -

mysql> select *from OnlyDigits;

Sau đây là kết quả -

+----+-------------+----------+
| 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)

Trường hợp 1 - Sau đây là truy vấn với regex khi bạn muốn có chính xác 10 chữ số trong một chuỗi và tất cả phải là một số:

mysql> select *from OnlyDigits
-> where UserId REGEXP '^[0-9]{10}$';

Sau đây là kết quả -

+----+------------+----------+
| Id | UserId     | UserName |
+----+------------+----------+
| 11 | 9999986787 | Johnson  |
+----+------------+----------+
1 row in set (0.00 sec)

Biểu thức chính quy thay thế của trường hợp 1. Truy vấn như sau:

mysql> select *from OnlyDigits
-> where UserId REGEXP '^[[:digit:]]{10}$';

Sau đây là kết quả -

+----+------------+----------+
| Id | UserId     | UserName |
+----+------------+----------+
| 11 | 9999986787 | Johnson  |
+----+------------+----------+
1 row in set (0.00 sec)

Trường hợp 2 - Nếu bạn muốn chỉ những hàng có một hoặc nhiều chữ số (Chỉ các chữ số). Truy vấn như sau:

mysql> select *from OnlyDigits
-> where UserId REGEXP'^[0-9]*$';

Sau đây là kết quả:

+----+------------+----------+
| Id | UserId     | UserName |
+----+------------+----------+
| 9  | 9999999    | James    |
| 10 | 153545     | Maxwell  |
| 11 | 9999986787 | Johnson  |
+----+------------+----------+
3 rows in set (0.00 sec)