REGEX不适用于mysql中的'(撇号)和 - (破折号)

时间:2009-07-02 13:13:36

标签: mysql regex

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

有没有解决方案?

以下是完整查询:

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

2 个答案:

答案 0 :(得分:1)

如果您的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

答案 1 :(得分:0)

你把字符放在方括号内吗?尝试这样的事情:

select * from Table where Field regexp '[\'-]'