2011-11-23 51 views
90

我要看看使用此查詢PDF手冊:爲什麼「_」(下劃線)匹配「 - 」(連字符)?

[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) 

爲什麼我看到了一個破折號,當我指定的名稱是taz_manual%.pdf

回答

187

因爲下劃線_是百分比%的通配符,只是它只查找一個字符。

SQL模式匹配使您可以使用「_」來匹配任何單個字符,「%」匹配任意數量的字符(包括零字符)。

(從MySQL的文檔中的部分3.3.4.7. Pattern Matching

如果你想使用下劃線在like爲文字,你要逃避它:

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

感謝您的信息(和鏈接)我只以爲%的外卡。 –

+2

不用客氣 –

+22

我怎麼知道這一點? – SublymeRick

1

我也有類似同時匹配完全匹配的字符串時出現空格和連字符:

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

上面的q uery沒有在MySQL中返回任何記錄。我不得不逃離空格和連字符和與等號使用LIKE,而不是完全匹配(=)如下:

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

您確定這是相關的嗎?也許沒有這個確切名稱的位置行...? –

+0

是的,有位置='IND - HQ'的行,上面確實解決了面臨的問題 – NBhat

+0

而且您知道,因爲在發佈答案之前五年你問過有這個問題的人嗎? –

相關問題