Mysql 如何选择列在括号中有两个字符的行?
这不管用。它返回了许多行,这些行的Mysql 如何选择列在括号中有两个字符的行?,mysql,regex,select,Mysql,Regex,Select,这不管用。它返回了许多行,这些行的c中包含的字符串在()中超过两个字符。您的转义已关闭 由于MySQL在字符串中使用C转义语法(例如,“\n”表示换行符),因此必须将REGEXP字符串中使用的任何“\”加倍 使用: 您如何运行此查询?如果您在(比如)PHP脚本中使用它,并按照以下方式编写: SELECT * FROM t WHERE c REGEXP '.*\\(..\\).*'; 然后PHP解释器将实际剥离这些反斜杠,生成真正的查询 $sql = "SELECT ... REGEXP '.
c
中包含的字符串在()
中超过两个字符。您的转义已关闭
由于MySQL在字符串中使用C转义语法(例如,“\n”表示换行符),因此必须将REGEXP字符串中使用的任何“\”加倍
使用:
您如何运行此查询?如果您在(比如)PHP脚本中使用它,并按照以下方式编写:
SELECT * FROM t WHERE c REGEXP '.*\\(..\\).*';
然后PHP解释器将实际剥离这些反斜杠,生成真正的查询
$sql = "SELECT ... REGEXP '.*\(..\).*';";
这将是任何至少有两个字符的记录。要使其正常工作,您必须加倍逃逸:
... REGEXP '.*(..).*';
PHP将从每个集合中去掉一个反斜杠,剩下的第二个将实际到达mysql
$sql = "SELECT ... REGEXP '.*\\(..\\).*';";
SQL FIDLE是MySQL解析器本身去除了这些斜杠,而不是PHP。尝试
echo'\(asdf\)斜杠仍然存在这只适用于()
之间的拉丁字符如果我需要查找()
中的两个字符是非拉丁字符的情况,例如中文字符,该怎么办?不确定是否可以这样做。警告:REGEXP和RLIKE运算符以字节方式工作,因此它们不是多字节安全的,可能会对多字节字符集产生意外的结果。此外,这些运算符按字节值比较字符,即使给定的排序规则将其视为相等,重音字符也可能不相等如果可以的话,请使用,比如,
,看@Fred的答案。它忽略了两个汉字之间的情况(),
。它实际上是有效的,但只适用于英文括号,而中文括号呢(uuu)
?比如可能无法正确处理括号之间的一个或两个多字节字符,但是多字节圆括号字符本身(U+FF08和U+FF09)应该没有问题,因为它们是以LIKE模式中的文字值提供的。您的意思是使用SELECT*FROM t,其中类似于“%”(uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu)%”的c应该可以工作吗?既不是'%\xff\x08\uuuuuuuuxff\x09%'
。我在我的应用程序中进行了测试。我不太会使用MySQL,所以我不确定您需要如何转义SQL语句中的多字节字符。
$sql = "SELECT ... REGEXP '.*\\(..\\).*';";
SELECT * FROM t WHERE c LIKE '%(__)%'