2013-04-04 7 views
5

Ja próbuje użyć LIKE klauzuli w oświadczeniu mysql następująco:MySQL WHERE LIKE

SELECT * FROM batches WHERE FilePath LIKE '%Parker_Apple_Ben_20-10-1956%' 

Dane dopasowane dane w kolumnie 'filePath' jest:

C:\SCAN\Parker_Apple_Ben_20-10-1830\TEST 

Powyższy Instrukcja SQL działa poprawnie i odbiera wiersz relevent, ale jeśli na przykład dodaję znak "\" na końcu klauzuli LIKE (jak poniżej), to nie odbiera on poprawnie wiersza:

SELECT * FROM batches WHERE FilePath LIKE '%Parker_Apple_Ben_20-10-1956\%' 

Zabawne chociaż gdybym umieścić znak „\” na początku klauzuli LIKE (jak poniżej) to podnosi rząd perfekcyjnie - to ma mnie zaskoczony.

SELECT * FROM batches WHERE FilePath LIKE '%\Parker_Apple_Ben_20-10-1956%' 

Odpowiedz

6

ciągu podobny, _ jest wieloznaczny pasujące do pojedynczego znaku, a więc, że musi uciec się prawidłowo dopasować dosłownym „_” zamiast potencjalnie dopasowania czegokolwiek. Dodatkowo jesteś wspomnieć, starając się dopasować ciąg kończący się w 1830 roku z podobnym zakończeniem 1956. Wreszcie, jak wspomniano przez JW i dokumentacji MySQL trzeba uciec backslashy dwukrotnie

http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html#operator_like

Ponieważ MySQL używa składni ucieczki C w łańcuchach (na przykład, „\ n” do stanowią znak nowej linii), należy podwoić żadnego „\”, który służy w podobny strun. Na przykład, aby wyszukać "\ n", określ go jako "\ n". Aby wyszukać "\", określ go jako "\\"; to dlatego, że backslashe są usuwane przez parser raz i jeszcze raz, gdy wzór mecz zostanie wykonany, pozostawiając jeden backslash być porównywane.

Spróbuj

SELECT * FROM batches 
WHERE FilePath LIKE '%Parker\_Apple\_Ben\_20-10-1830\\\\%' 

http://sqlfiddle.com/#!2/3ce74/3

0

Powinieneś unikać swojej "\" postaci. Spróbuj tego:

SELECT * FROM batches WHERE FilePath LIKE '%Parker_Apple_Ben_20-10-1956\\%' 
+0

Witam, Próbowałem, że wcześniej, ale bez powodzenia – Mike

1

dodanie \ w aktualnym zapytaniu ucieka %, spróbuj tego

SELECT * FROM batches WHERE FilePath LIKE '%Parker\_Apple\_Ben\_20-10-1956\\\\%' 

Aby wyszukać „\”, należy określić go jako „ \\\\ "; to dlatego, że backslashe są usuwane przez parser raz i jeszcze raz, gdy wzór mecz zostanie wykonany, pozostawiając jeden backslash być porównywane.

+0

Próbował pan jest? –

0

powinien uciec znaków specjalnych jak \,”, _ etc w mysql jak \\ , \', \_