首页 > 解决方案 > 检查字符串是否包含超过 5 位的数字

问题描述

我正在尝试构建一个查询来检查字符串是否包含至少超过 5 个连续数字。

询问;

SELECT count(id) as gV FROM  someTable WHERE ... title REGEXP '(\d{5,})' order by id limit 0,10

样本数据

Some text here 123456 (MATCH)
S0m3 t3xt h3r3
Some text 123 here 345
98765 Some text here (MATCH)
Some12345Text Around (MATCH)

期望的输出

3 (Some text here 123456, 98765 Some text here, Some12345Text Around)

MySQL 查询中的正则表达式是否有任何特定规则?

标签: mysqlsql

解决方案


MySQL 的正则表达式引擎没有实现\d“数字”表达式,但是您可以将其表示为字符类范围,例如[0-9]或特殊字符类[[:digit:]]{5,}您尝试的形式支持大括号重复语法。

可用的正则表达式语法在手册中描述

因此,您可以使用以下任何一种形式:

 title REGEXP '[0-9]{5,}'
 title REGEXP '[[:digit:]]{5,}'

例子:

不匹配:

> SELECT '123' REGEXP '[[:digit:]]{5,}';
+--------------------------------+
| '123' REGEXP '[[:digit:]]{5,}' |
+--------------------------------+
|                              0 |
+--------------------------------+

> SELECT '1X345' REGEXP '[0-9]{5,}';
+--------------------------------+
| '123' REGEXP '[0-9]{5,}'       |
+--------------------------------+
|                              0 |
+--------------------------------+

匹配示例:

> SELECT '98765 Some text here' REGEXP '[[:digit:]]{5,}';
+-------------------------------------------------+
| '98765 Some text here' REGEXP '[[:digit:]]{5,}' |
+-------------------------------------------------+
|                                               1 |
+-------------------------------------------------+

> SELECT 'Some text here 123456' REGEXP '[0-9]{5,}';
+--------------------------------------------+
| 'Some text here 123456' REGEXP '[0-9]{5,}' |
+--------------------------------------------+
|                                          1 |
+--------------------------------------------+
1 row in set (0.00 sec)

推荐阅读