2011-11-23 12 views
90

私はこのクエリを使用して、PDFマニュアルを探す必要があります:私はtaz_manual%.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) 

は、なぜ私はダッシュでものを見ていますか?

答えて

187

アンダースコア_は、パーセントが%のようなワイルドカードなので、1文字のみを検索する点が異なります。

SQLパターンマッチングを使用すると、任意の1文字に一致する「_」とゼロ文字を含む任意の数の文字に一致する「%」を使用できます。

(MySQLのドキュメントのセクション3.3.4.7. Pattern Matchingから。)

リテラルとしてlikeにアンダースコアを使用したい場合、あなたはそれをエスケープする必要があります。

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

情報をお寄せいただきありがとうございます(およびリンク):私は、スペースやハイフンを脱出し、次のように等号(=)でLIKEの代わりに、完全一致を使用する必要がありました。 –

+2

あなたは歓迎です –

+22

私はこれを知りませんでしたか? – SublymeRick

1

私は似ていました文字列を完全一致と一致させているときにスペースとハイフンを使用して発行する:

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

上記のq ueryはMySQLでレコードを返さなかった。私は唯一の%はワイルドカードだと思った

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

これは関連していますか?たぶん、この正確な名前の場所行はありません... ??? –

+0

はい、場所= 'IND - HQ'の行があり、上記の問題が直面していた問題を解決しました – NBhat

+0

あなたはあなたがあなたの答えを投稿した5年前にこの質問をした人に尋ねたからです。 –

関連する問題