如何在括号中选择col有两个字符的行?

时间:2012-09-14 04:46:36

标签: mysql regex select

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

这不起作用。它返回了许多行,c包含()中包含两个以上字符的字符串。

3 个答案:

答案 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。