我在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/