我有一个表格,其中一列允许特殊字符,如“/”(正斜杠)和“”(反斜杠)。
现在,当我尝试从表中搜索此类记录时,我无法获得这些记录。
例如:abc\def 或 abc/def
我正在生成一个搜索查询,例如:
select * from table1_1 where column10 like '%abc\def%'
它返回 0 行,但实际上应该返回 1 条记录。在这种情况下如何编写查询?
在 MySQL 中,这有效:
select * from Table1
where column10 like '%abc\\\\def%'
反斜杠是字符串和LIKE
模式的转义前缀。LIKE
因此,对于字符串文字语法,您需要将其加倍,然后再加倍。
你必须\
和另一个人一起逃避\
select * from table1_1 where column10 like '%abc\\def%'
当我在 MySQL v5.5 上尝试时,转义LIKE
值不起作用。经过几次尝试,真正起作用的是一个正则表达式(我也不得不在那里逃脱,并将它隐藏在一个字符类中)。我终于让它像这样工作:
select * from table1_1 where column10 rlike 'abc[\\]def'
这些不起作用:
... column10 like '%abc\\def%'
... column10 like concat('%abc', char(92), 'def%')
... column10 rlike 'abc\\def'
请注意,您还将此标记为 PL/SQL,即 Oracle。您发布的查询在 Oracle 上按原样工作。PL/SQL 标签是错误的吗?
使用转义。
https://dev.mysql.com/doc/refman/5.0/en/string-literals.html
表 9.1。特殊字符转义序列
由序列 \0 表示的转义序列字符 ASCII NUL (0x00) 字符。
\' 单引号 (“'”) 字符。
\" 双引号 (“"”) 字符。
\b 退格字符。
\n 换行符(换行符)。
\r 回车符。
\t 制表符。
\Z ASCII 26 (Control+Z)。见表格后面的注释。
\ 反斜杠 (“\”) 字符。
\% 一个人物。见表格后面的注释。
_ 一个人物。见表格后面的注释。
如果您使用 PHP sprintf()将您的查询放在您想要的位置:
AND column10 LIKE '%/%'
这在 sprintf() 中对我有用:
AND column10 LIKE '%%/%%'
(MySQL 8 - WAMP)