2014-12-21 95 views
0

我需要從可以包含特殊characteres例如領域做出選擇選擇特殊characteres的MySQL

+--------------+ 
| code   | 
+--------------+ 
| **4058947"_\ | 
| **4123/"_\ | 
| sew'-8947"_\ | 
+--------------+ 

我試試這個

select code from table where code REGEXP '[(|**4058947"_\|)]'; 
select code from table where code REGEXP '[(**4058947"_\)]'; 
select code from table where code REGEXP '^[(**4058947"_\)]'; 

但querys返回空

所有行和該查詢返回
select code from table where code REGEXP '^[(**4058947"_\)]$'; 

我只需要返回第一個或指定的

+0

在一個正則表達式中,大多數反斜槓是特殊字符。如果使用'\\'(雙反斜槓)而不是單個? – 11684

+0

反斜槓是代碼名稱中的字段的一部分 – user3680275

+0

是的,我看到了。但是您在SQL語句中使用的正則表達式可能不起作用,因爲反斜槓是轉義字符(如在Java/PHP/JavaScript中),所以您應該自行轉義它。此外,您還需要在正則表達式中轉義代碼字段中的其他特殊字符。 (即'*','|','('和')')。 – 11684

回答

0

要選擇只有一行,你可以這樣做,如果它不關心哪一個。

SELECT code FROM table LIMIT 1 

如果確實事,放下正則表達式。

SELECT code FROM table WHERE code = "**4058947\"_\\" 

匹配那些特殊字符(在這種情況下,"\),你需要「逃」出來。 (這就是它的名字,我沒有弄明白。)在大多數主流語言中,這是通過在它前面加一個反斜槓來完成的(MySQL也是這樣做的)。反斜槓是轉義字符,後面帶有另一個字符的反斜槓被稱爲轉義序列。正如你所看到的,我避開了我想要匹配的代碼值中的引號和反斜槓,所以它現在應該可以工作。


如果你需要保持正則表達式(我希望不是這樣的,因爲你必須要匹配對文本字符串)同樣的道理也適用。退出引號和反斜槓,如果你刪除括號和括號,你會好起來的。請注意,在正則表達式中,您需要轉義更多的字符。這是因爲某些字符(例如:| []() * +在正則表達式中有一個特殊的功能,這非常方便,但當您需要將字符串與該字符匹配時會變得有點麻煩,在這種情況下,您需要這是因爲MySQL首先解析查詢,並在遇到無效轉義序列時拋出一個錯誤(也就是說,如果你轉義了一個你不需要根據MySQL逃脫的字符),那麼只有這樣是正則表達式解析的結果,雙反斜槓替換爲單反斜槓,這很快變得很難看,因爲這意味着匹配一個反斜槓和一個MySQL正則表達式需要4個反斜槓!兩個在正則表達式中,但這需要加倍,因爲MySQL首先將它解析爲一個字符串!