我在MySQL数据库中使用REGEXP进行搜索,但是当我在搜索查询中插入'(撇号)和-(破折号)时,它没有返回正确的数据。

有什么解决办法吗?

这是完整的查询:

select * from table where  (field REGEXP 'SAN DIEGO | SAN DIEGO |^SAN DIEGO' or field2 REGEXP 'SAN DIEGO | SAN DIEGO |^SAN DIEGO' )

最佳答案

如果您的REGEXP字符串定界符是单引号,请在字符串中将其转义。另外,根据您的业务逻辑和表结构,您可以执行CONCAT来压缩语句:

SELECT field1, field2
WHERE  CONCAT( field1, field2 ) REGEXP 'Mary\'s Restaurant'


如果在字符类中使用破折号,请对其进行转义或使其成为类中的第一项,因此引擎不认为您要尝试指定范围:

 ... REGEXP 'Mary\'s[- _]Restaurant'


如果您使用的是圣地亚哥示例,则可以通过使用单词边界来减少REGEXP:

SELECT field1, field2
WHERE  CONCAT( field1, field2 ) REGEXP '[[:<:]]SAN DIEGO[[:>:]]'


参见:MySQL 5.1 REGEXP Manual

关于mysql - REGEX不适用于MySQL中的'(撇号)和-(破折号),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1074269/

10-14 20:11