2013-08-23 66 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

試過了,但它不工作.. –