在 MySQL 中使用正则表达式获取仅包含数字的部分?


如果你想使用正则表达式 (REGEXP) 获取只有数字的部分,请在 where 子句中使用以下正则表达式 (^\[0-9]*$)。

案例 1 − 如果你只需要那些精确包含 10 位数字且所有字符都必须是数字的行,请使用以下正则表达式。

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

案例 2 − 如果你只需要那些包含一位或多位数字(只有数字)的行,则语法如下:

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)

更新于:2020年6月30日

19K+ 次浏览

启动你的职业生涯

完成课程,获得认证

开始学习
广告