2011-11-23 37 views
90

tôi phải tìm kiếm một hướng dẫn sử dụng PDF truy vấn này:Tại sao "_" (gạch dưới) khớp "-" (dấu nối)?

[email protected]:test> select * from a where name like '%taz_manual%.pdf%'; 
+--------------------+------------------+-------------+ 
| name    | description  |  size | 
+--------------------+------------------+-------------+ 
| taz-manual-1.1.pdf | Manual v1.0 TA-Z | 31351902 | 
| taz-manual-0.2.pdf | Manual v1.0 T1-A |  3578278 | 
| taz_manual-2.0.pdf | Manual v2.0 GA-X | 542578278 | 
etc........ 
+--------------------+------------------+-------------+ 
132 row in set (0.00 sec) 

Tại sao tôi nhìn thấy một với dấu gạch ngang khi tôi ghi rõ tên là taz_manual%.pdf?

Trả lời

187

Vì dấu gạch dưới _ là ký tự đại diện như phần trăm %, ngoại trừ chỉ có một ký tự.

So khớp mẫu SQL cho phép bạn sử dụng "_" để khớp với bất kỳ ký tự đơn lẻ nào và "%" để khớp với số ký tự tùy ý (bao gồm cả ký tự 0).

(. Từ phần 3.3.4.7. Pattern Matching trong tài liệu MySQL)

Nếu bạn muốn sử dụng dấu gạch chân trong like như một chữ, bạn phải thoát khỏi nó:

select * from a where name like '%taz\_manual%.pdf%'; 
+17

nhờ thông tin (và liên kết) tôi chỉ nghĩ% là một thẻ hoang dã. –

+2

bạn được chào đón –

+22

LÀM THẾ NÀO ĐỂ TÔI KHÔNG BAO GIỜ BIẾT NÀY? – SublymeRick

1

Tôi đã có một tương tự vấn đề với dấu cách và dấu gạch ngang trong khi đối sánh các chuỗi có đối sánh chính xác:

SELECT id FROM location WHERE name = 'IND - HQ'; 

q ở trên uery không trả lại bất kỳ bản ghi nào trong MySQL. Tôi đã phải thoát khỏi không gian và dấu gạch nối và sử dụng LIKE thay vì đối sánh chính xác bằng (=) như sau:

SELECT id FROM location WHERE name LIKE 'IND_\-_HQ'; 
+0

Bạn có chắc chắn điều này có liên quan? Có lẽ không có hàng vị trí nào với tên chính xác này ... ??? –

+0

có, có các hàng có vị trí = 'IND - HQ' và ở trên đã khắc phục vấn đề phải đối mặt với – NBhat

+0

Và bạn biết rằng vì bạn đã hỏi người đã có câu hỏi này năm năm trước khi bạn đăng câu trả lời? –

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