mysql - 如何使用特殊字符/(正斜杠)和\(反斜杠)处理查询搜索

时间:2013-05-10 20:28:47

标签: mysql plsql

我正在使用表格,其中列允许使用特殊字符,例如'/'正斜杠和'\'反斜杠。

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

示例: abc \ def或abc / def 我正在生成类似

的搜索查询
select * from table1_1 where column10 like '%abc\def%'

它返回0行但是实际上存在1条记录。在这种情况下如何编写查询,请告诉我。

感谢。

6 个答案:

答案 0 :(得分:15)

巴马尔部分正确(所以+1),

所以诀窍是双重逃避只有反斜杠,因为字符串转义只需要一次转义。

例如

  • 单引号'只需要在LIKE '%\'%'
  • 后转义
  • 但要查询反斜杠\,您需要双倍转义为LIKE '%\\\\%'
  • 如果您想查询反斜杠+单引号\',请LIKE '%\\\\\'%'(带5个反斜杠)

Explanation Source 摘录:

  

因为MySQL在字符串中使用C转义语法(例如,“\ n”到   代表换行符,你必须加倍你使用的任何“\”   在LIKE字符串中。例如,要搜索“\ n”,请将其指定为“\ n”。   要搜索“\”,请将其指定为“\\”;这是因为   反斜杠由解析器剥离一次,并在模式时再次剥离   匹配,留下一个反斜杠来匹配。

答案 1 :(得分:11)

在MySQL中,这可行:

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

FIDDLE

反斜杠是字符串和LIKE模式的转义前缀。因此,您需要为LIKE加倍一次,并再次为字符串文字语法加倍。

答案 2 :(得分:1)

您必须使用其他\

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

答案 3 :(得分: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标签是错误的吗?

答案 4 :(得分:0)

使用转义。

https://dev.mysql.com/doc/refman/5.0/en/string-literals.html

表9.1。特殊字符转义序列

由序列表示的转义序列字符 \ 0 ASCII NUL(0x00)字符。

\'单引号(“'”)字符。

\“双引号(”“”)字符。

\ b退格符。

\ n换行符(换行符)。

\ r \ n回车符。

\ t标签字符。

\ Z ASCII 26(Control + Z)。见表格后面的注释。

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

\%一个“%”字符。见表格后面的注释。

_一个“_”字符。见表格后面的注释。

答案 5 :(得分:0)

如果您使用PHP sprintf()将查询合并到所需位置:

AND column10 LIKE '%/%'

这在sprintf()中对我有用:

AND column10 LIKE '%%/%%'

(MySSQL 8-WAMP)