如何在mysql查询中使用正则表达式

时间:2012-12-06 09:30:35

标签: mysql regex

我在数据库中有以下条目:

id       summary
1       numbers of word 200 in the doc 0x123
2       [main] numbers of word 150 in the doc 0x678
3       numbers of word 678 in the doc 0x4536 
4       this file has empty
5       not completed
6       numbers of word 86542 in the doc 0x6356 

我想从数据库“Page”中检索id,并根据汇总值检索表名“details”。我希望所有四个id(1,2,3,6)具有汇总值"numbers of word <any_number> in the doc <any_number> 并管理空间......

1 个答案:

答案 0 :(得分:5)

如果您可以接受%也与非数字匹配的权衡,那么使用LIKE SQL运算符(这也是跨平台)这是微不足道的。

select * from details where lower(summary) LIKE 'numbers of word % in the doc %'

如果你只想匹配数字和空格,我认为你确实需要正则表达式,幸好在MySQL中直接支持。 MySQL 5.1 manual, section 12.5.2: Regular Expressions。像这样:

select * from details
where lower(summary) REGEXP '^numbers of word [0-9 ]+ in the doc [0-9x ]+$'

如果您不需要或希望不区分大小写,则可以取消对LOWER()的调用。我在第二个正则表达式中包含x,因为您的数字前缀为0x(十六进制?)。

请记住,索引可能无法用于LIKEREGEXP,这意味着查询会产生相对非常大的I / O成本。