2013-04-04 31 views
5

Tôi đang cố gắng sử dụng mệnh đề NHƯ trong một tuyên bố mysql như sau:MYSQL Ở ĐÂU NHƯ Tuyên Bố

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

Các dữ liệu phù hợp với dữ liệu trong cột của filepath 'là:

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

Trên đây Câu lệnh SQL hoạt động tốt và chọn hàng có liên quan, nhưng nếu tôi ví dụ thêm ký tự "\" vào cuối mệnh đề LIKE (như sau), nó không nhận hàng chính xác:

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

Funnily đủ mặc dù nếu tôi đặt một '\' ký tự ở đầu mệnh đề LIKE (như sau) nó chọn lên hàng hoàn toàn tốt - điều này đã cho tôi bối rối.

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

Trả lời

6

Trong LIKE, _ là một ký tự đại diện phù hợp với một nhân vật duy nhất và do đó cần thoát để phù hợp một cách chính xác một chữ '_' thay vì có khả năng phù hợp với bất cứ điều gì. Ngoài ra bạn đang nhắc đến cố gắng để phù hợp với một chuỗi kết thúc năm 1830 với một kết thúc có hậu như năm 1956. Cuối cùng như đã đề cập bởi JW và các tài liệu MySQL bạn cần phải thoát khỏi dấu xồ nguợc hai lần

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

Bởi vì MySQL sử dụng cú pháp thoát C trong chuỗi (ví dụ: “\ n” đến đại diện cho ký tự dòng mới), bạn phải tăng gấp đôi bất kỳ “\” nào mà bạn sử dụng trong các chuỗi LIKE. Ví dụ: để tìm kiếm “\ n”, hãy chỉ định nó là “\ n”. Để tìm kiếm “\”, chỉ định nó là “\\”; điều này là do các dấu chéo ngược bị trình phân tích cú pháp loại bỏ một lần nữa khi mô hình kết hợp được thực hiện, để lại một dấu gạch chéo ngược duy nhất được đối sánh.

Hãy thử

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

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

0

Bạn nên thoát khỏi ký tự '\' của mình. Hãy thử điều này:

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

Hi, tôi đã cố gắng mà trước đây nhưng không có may mắn – Mike

1

thêm \ trong truy vấn hiện tại thoát %, hãy thử này

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

Để tìm kiếm “\”, xác định nó là “ \\\\\; điều này là do các dấu chéo ngược bị trình phân tích cú pháp loại bỏ một lần nữa khi mô hình kết hợp được thực hiện, để lại một dấu gạch chéo ngược duy nhất được đối sánh.

+0

bạn đã thử này? –

0

Bạn nên thoát khỏi nhân vật đặc biệt như \,', _ vv trong mysql như \\ , \', \_

Các vấn đề liên quan