10

我有一个表格,其中一列允许特殊字符,如“/”(正斜杠)和“”(反斜杠)。

现在,当我尝试从表中搜索此类记录时,我无法获得这些记录。

例如:abc\def 或 abc/def

我正在生成一个搜索查询,例如:

select * from table1_1 where column10 like '%abc\def%'

它返回 0 行,但实际上应该返回 1 条记录。在这种情况下如何编写查询?

4

6 回答 6

22
于 2015-02-03T23:35:21.063 回答
13

在 MySQL 中,这有效:

select * from Table1
where column10 like '%abc\\\\def%'

小提琴

反斜杠是字符串和LIKE模式的转义前缀。LIKE因此,对于字符串文字语法,您需要将其加倍,然后再加倍。

于 2013-05-10T20:59:01.603 回答
1

你必须\和另一个人一起逃避\

 select * from table1_1 where column10 like '%abc\\def%'
于 2013-05-10T20:31:59.317 回答
1

当我在 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 标签是错误的吗?

于 2013-05-10T20:42:42.213 回答
0

使用转义。

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)。见表格后面的注释。

\ 反斜杠 (“\”) 字符。

\% 一个人物。见表格后面的注释。

_ 一个人物。见表格后面的注释。

于 2013-05-10T20:33:36.870 回答
0

如果您使用 PHP sprintf()将您的查询放在您想要的位置:

AND column10 LIKE '%/%'

这在 sprintf() 中对我有用:

AND column10 LIKE '%%/%%'

(MySQL 8 - WAMP)

于 2020-03-24T23:24:32.297 回答