SELECT * FROM t WHERE c REGEXP '.*\(..\).*';
这不起作用。它返回了许多行,c
包含()
中包含两个以上字符的字符串。
答案 0 :(得分:1)
SELECT * FROM t WHERE c LIKE '%(__)%'
SQL小提琴here
答案 1 :(得分:0)
你逃脱了。
http://dev.mysql.com/doc/refman/5.0/en/regexp.html#operator_regexp
因为MySQL在字符串中使用C转义语法(例如,“\ n”表示换行符),所以必须将在REGEXP字符串中使用的任何“\”加倍。
使用:
SELECT * FROM t WHERE c REGEXP '.*\\(..\\).*';
答案 2 :(得分:-1)
您是如何运行此查询的?如果您在(比如说)PHP脚本中使用它,并按照以下方式编写它:
$sql = "SELECT ... REGEXP '.*\(..\).*';";
然后PHP解释器实际上将剥离那些反斜杠,产生真正的查询
... REGEXP '.*(..).*';
这将是任何至少包含两个字符的记录。为了使其正常工作,你必须双重逃避:
$sql = "SELECT ... REGEXP '.*\\(..\\).*';";
PHP会剥离每个集合中的一个反斜杠,让第二个反射实际到达mysql。