我需要在我的一个mysql表中找到包含7个以上数字的条目但这些数字是用字母或其他任何东西分隔的。
我所拥有的是我用来查找dsc123456789等条目的一小段代码:
select * from crawl where title regexp '[0-9]{7}'
如何找到dsc-123-456_78B9等条目?我尝试了不同的事情但到目前为止没有成功。
由于
答案 0 :(得分:2)
您可以使用以下解决方案:
SELECT *
FROM crawl
WHERE title REGEXP '(([^[:digit:]])?[[:digit:]]){8,}';
为什么答案的原始查询不起作用?
-- this query doesn't work!
SELECT *
FROM crawl
WHERE title REGEXP '\d([^\d]?\d){7,}'
MySQL不能使用\d
(数字)等字符组。所以查询每次都失败。在PHP和其他语言中,正则表达式如下所示:
\d([^\d]?\d){7,}
但是在MySQL上这是无效的。所以你必须使用MySQL的character classes来解决这个问题:
(([^[:digit:]])?[[:digit:]]){8,}
提示:请确保使用
{8}
或{8,}
代替{7}
,因为您要查找超过7个数字/位的所有条目。< / p>