如何检索notes列包含连续五位数字的所有数据行?
解决MySQL中匹配连续五位数字的正则查询问题
你原来的思路完全正确,用REGEXP确实能实现这个需求,但问题出在MySQL的正则表达式语法细节上——MySQL不支持\d这个简写来匹配数字,这就是你的语句没生效的核心原因。
正确的查询语句
你可以用以下两种写法快速实现需求:
写法1:直接指定数字范围
SELECT id, name, notes FROM table WHERE notes REGEXP '[0-9]{5}'
写法2:使用POSIX字符类(兼容性更好)
SELECT id, name, notes FROM table WHERE notes REGEXP '[[:digit:]]{5}'
为什么原来的语句不行?
MySQL的正则表达式实现(尤其是8.0之前的版本)遵循POSIX标准,不支持Perl风格的\d简写。要匹配单个数字,你需要:
- 用
[0-9]直接指定0到9的数字范围 - 或者用POSIX标准的
[:digit:]字符类(注意必须放在外层方括号内,写成[[:digit:]])
如果你的MySQL版本是8.0及以上,虽然开始支持部分Perl风格正则,但\d在SQL语句的单引号内需要转义成\\d,写法如下(不过兼容性不如上面两种通用):
SELECT id, name, notes FROM table WHERE notes REGEXP '\\d{5}'
执行结果验证
运行上面的正确语句后,会精准检索出notes列包含连续五位数字的行,和你预期的结果完全一致:
id | name | notes 2 | person 2 | bla 38728 bla bla 3 | person 3 | bla83784 bla bla 4 | person 4 | 73804
内容的提问来源于stack exchange,提问作者jacob
相关产品推荐
相关产品推荐

