0
SELECT * FROM t WHERE c REGEXP '.*\(..\).*';

这没有用。它返回了许多行,其c包含的字符串在().

4

3 回答 3

1
SELECT * FROM t WHERE c LIKE '%(__)%'

SQL小提琴在这里

于 2012-09-14T04:55:53.920 回答
0

你的逃生通道已经关闭。

http://dev.mysql.com/doc/refman/5.0/en/regexp.html#operator_regexp

因为 MySQL 在字符串中使用 C 转义语法(例如,“\n”来表示换行符),所以您必须将您在 REGEXP 字符串中使用的任何“\”加倍。

采用:

SELECT * FROM t WHERE c REGEXP '.*\\(..\\).*';
于 2012-09-14T04:52:24.237 回答
-1

你是如何运行这个查询的?如果您在(比如说)PHP 脚本中使用它,并像这样编写它:

$sql = "SELECT ... REGEXP '.*\(..\).*';";

那么 PHP 解释器实际上会去掉那些反斜杠,产生真正的查询

... REGEXP '.*(..).*';

这将只是具有至少两个字符的任何记录。为了使其正常工作,您必须双重转义:

$sql = "SELECT ... REGEXP '.*\\(..\\).*';";

PHP 将从每组中删除一个反斜杠,让第二个实际到达 mysql。

于 2012-09-14T04:52:27.963 回答