2013-08-23 51 views
0

我们在生产环境中的表中有一些记录,其中称为compiledlimitation的特定字段包含单引号通过多个反斜杠转义的值。选择单引号转义的记录只有双反斜线

E.g. Test\\'s

我们试图只选择这样的记录,但类似下面的查询返回那些在另外一个反斜杠(适当的记录),选择那些双反斜线记录 -

select * from tablename where compiledlimitation like "%\\'%" 

上述查询都返回这些行 -

Test\\'s 

Test\'s 

如何修改查询以仅提取具有双反斜杠的行。

字段编译限制是一个文本字段。

更新

问题尚未解决。这两个查询返回两个记录 -

select * from tablename where compiledlimitation like "%\\\\\'%" 
select * from tablename where compiledlimitation like "%\\\'%" 
+0

会逃脱它是不'\\\\\“'? [斜线转义下一个斜线] [斜线] [斜线转义下一个斜线] [斜线] [斜线转义单引号] [单引号] – Martijn

+0

是的,这看起来是正确的,但我仍然得到两个记录。看起来很奇怪 –

+0

问题已解决,但不确定如何为每个反斜杠添加4个反斜杠,即4 + 4 + 1 = 9,即“%\\\\\\\\'%”'编译限制。发现从这个http://stackoverflow.com/questions/13414791/why-i-need-to-double-escape-use-4-to-find-a-backslash-in-pure-sql –

回答

2
SELECT * FROM my_table WHERE my_column RLIKE '[\\]{2}'; 

或类似的东西

+0

哇,这是行之有效的,看起来很简单的正则表达式 –

+0

这看起来像是一个很好的答案,比每次斜杠两次转义(比如你在评论中链接到的SO问题)要干净得多。 – chucknelson

+0

是的,然后我打了3k。放屁! :-) – Strawberry

0

为了逃避两条斜线,你应该只需要在你喜欢用四:

LIKE "%\\\\%" 

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

表9.1。特殊字符转义序列
...
\\ =>反斜杠(“\”)字符。
...

+0

这看起来是正确的,但我我仍然得到两个记录。它看起来很奇怪 –

+0

它可能是三个像另一个答案。我目前没有mySQL,我试图用sqlfiddle测试,但该网站有问题... – chucknelson

+0

这是行不通的..更新的问题 –

0

\是一个转义字符,所以要考虑2 \你需要一个额外的\

select * from tablename where compiledlimitation like "%\\\'%" 
+0

试过了,但它不工作.. –