エスケープ文字

「%」や「_」をワイルドカードとしてではなく文字列として検索したいときに使用するエスケープ文字 

 

エスケープ文字とは 

「\」です。

「%」や「_」をワイルドカードとしてではなく文字列として検索したいときに使用します。

 

例:以下のようなeventsテーブルがあるとします。

id name date description
1 Whistler 1999-11-09 Went hiking.
2 Puffball 1999-11-08 Chased
3 Bowser 1999-11-07 Go to park.
4 Momiji 2003-10-20 Came to the Hayashi family.
5 Buffy 2000-10-30 Climbed to the mountain.
6 jassmine 2005-10-10 Studied.
7 hayashi_yoshino 2015-10-30 100% achieved

 

 

 エスケープ文字を使わない場合

SELECT * FROM events WHERE name LIKE '%_%';

id name date description
1 Whistler 1999-11-09 Went hiking.
2 Puffball 1999-11-08 Chased
3 Bowser 1999-11-07 Go to park.
4 Momiji 2003-10-20 Came to the Hayashi family.
5 Buffy 2000-10-30 Climbed to the mountain.
6 jassmine 2005-10-10 Studied.
7 hayashi_yoshino 2015-10-30 100% achieved


「%」は0文字以上の任意の文字列、「_」は任意の1文字を意味するので「%_%」だと1文字以上の文字列は全部ヒットしてしまいます。

 

エスケープ文字を使う場合

そこで以下のように_の前にエスケープ文字をつけて「%\_%」とすれば、nameに_が含まれるレコードのみ取得できます。

SELECT * FROM events WHERE name LIKE '%\_%';

id name date description
7 hayashi_yoshino 2015-10-30 100% achieved

 

railsのメソッドの場合

railsだと以下の書き方で同じSQLが吐かれます。

> Event.where('name LIKE ?', '%\_%')

  Event Load (0.4ms)  SELECT  `events`.* FROM `events` WHERE (name LIKE '%\\_%') LIMIT 11

=> #<ActiveRecord::Relation [#<Event id: 7, name: "hayashi_yoshino", date: "2015-10-30", description: "", created_at: "2019-11-13 11:20:16", updated_at: "2019-11-13 11:20:16">]>

 

 

感想その他

LIKE句はrailsSQLも似ているな似ているな〜と思いました。