在sql查询中,\%和\\是什么意思?

nwsw7zdq  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(2608)

我知道 % 以及 _ 通配符,但我被困在一个问题,这是使用两个额外的字符 \% 以及 \\ ,我无法理解这些字符在 SQL 查询

SELECT productID 
FROM productList 
WHERE productName LIKE 'ab\%cd%'

以及

SELECT productID 
FROM productList 
WHERE productName LIKE 'ab\\cd%'

这两件事是相同的还是不同的??

vatpfxk5

vatpfxk51#

我相信最好的方法就是以身作则。
为了更好地理解它,你需要在使用时了解三件事 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
igetnqfo

igetnqfo2#

这个 \% 以及 \_ 序列用于搜索 % 以及 _ 在模式匹配上下文中,否则它们将被解释为通配符。
为了 \\ 它搜索一个反斜杠 \ .
参考:mysql 8.0参考手册,9.1.1字符串文本,表9.1特殊字符转义序列

uttx8gqw

uttx8gqw3#

% 是一个特殊的角色,你必须用一个 \ 匹配文字 % 数据中的符号。所以, 'ab\%cd%' 匹配字母a,后跟字母b,后跟%符号,字母c,字母d,然后是任何其他文本(因为 % 是通配符)。
同样,因为 \ 是用于创建转义序列的特殊字符,必须对其进行转义才能与文字匹配 \ 在一个模式中,所以要匹配一个 \ 你必须把它编码成 \\ .

相关问题