我相信最好的方法就是以身作则。 为了更好地理解它,你需要在使用时了解三件事 LIKE sql中的运算符: \ 用于转义特殊字符以将其用作普通字符 % 用于匹配任意数量的字符(包括0) 特殊字符是 \ 以及 % 所以,如果你想从字面上包含它们,你需要转义它们,所以要在文本列中检查它们,你需要分别使用 \\ 以及 \% . 下面是一个表格,上面有单词和正确/错误的结果 LIKE 两种模式的比较:
word | ab\%cd% | ab\\cd%
----------+---------+---------
ab\ | f | f -- this would match second pattern but there is no "cd" at the end
ab\cd | f | t -- \\ is escaped "\", and % matches none characters
ab\cdxzy | f | t -- \\ is escaped "\", and % matches character sequence "xzy"
abcd | f | f -- every string requires either "%" or "\" character after "ab"
ab%cd | t | f -- \% is escaped "%", and % matches none characters
ab%cdxzy | t | f -- \% is escaped "%", and % matches character sequence "xzy"
ab\%cd | f | f -- there is no pattern which matches both chars "\%" in sequence
ab%\cd | f | f -- same as above, but characters are "%\" in sequence
3条答案
按热度按时间vatpfxk51#
我相信最好的方法就是以身作则。
为了更好地理解它,你需要在使用时了解三件事
LIKE
sql中的运算符:\
用于转义特殊字符以将其用作普通字符%
用于匹配任意数量的字符(包括0)特殊字符是
\
以及%
所以,如果你想从字面上包含它们,你需要转义它们,所以要在文本列中检查它们,你需要分别使用\\
以及\%
.下面是一个表格,上面有单词和正确/错误的结果
LIKE
两种模式的比较:igetnqfo2#
这个
\%
以及\_
序列用于搜索%
以及_
在模式匹配上下文中,否则它们将被解释为通配符。为了
\\
它搜索一个反斜杠\
.参考:mysql 8.0参考手册,9.1.1字符串文本,表9.1特殊字符转义序列
uttx8gqw3#
自
%
是一个特殊的角色,你必须用一个\
匹配文字%
数据中的符号。所以,'ab\%cd%'
匹配字母a,后跟字母b,后跟%符号,字母c,字母d,然后是任何其他文本(因为%
是通配符)。同样,因为
\
是用于创建转义序列的特殊字符,必须对其进行转义才能与文字匹配\
在一个模式中,所以要匹配一个\
你必须把它编码成\\
.