我正在使用表格,其中列允许使用特殊字符,例如'/'正斜杠和'\'反斜杠。
现在,当我尝试从桌面搜索此类记录时,我无法获得这些记录。
示例: abc \ def或abc / def 我正在生成类似
的搜索查询select * from table1_1 where column10 like '%abc\def%'
它返回0行但是实际上存在1条记录。在这种情况下如何编写查询,请告诉我。
感谢。
答案 0 :(得分:15)
巴马尔部分正确(所以+1),
所以诀窍是双重逃避只有反斜杠,因为字符串转义只需要一次转义。
例如
'
只需要在LIKE '%\'%'
\
,您需要双倍转义为LIKE '%\\\\%'
\'
,请LIKE '%\\\\\'%'
(带5个反斜杠)因为MySQL在字符串中使用C转义语法(例如,“\ n”到 代表换行符,你必须加倍你使用的任何“\” 在LIKE字符串中。例如,要搜索“\ n”,请将其指定为“\ n”。 要搜索“\”,请将其指定为“\\”;这是因为 反斜杠由解析器剥离一次,并在模式时再次剥离 匹配,留下一个反斜杠来匹配。
答案 1 :(得分:11)
在MySQL中,这可行:
select * from Table1
where column10 like '%abc\\\\def%'
反斜杠是字符串和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)