エスケープ文字
「%」や「_」をワイルドカードとしてではなく文字列として検索したいときに使用するエスケープ文字
エスケープ文字とは
「\」です。
「%」や「_」をワイルドカードとしてではなく文字列として検索したいときに使用します。
例:以下のようなeventsテーブルがあるとします。
エスケープ文字を使わない場合
SELECT * FROM events WHERE name LIKE '%_%';
「%」は0文字以上の任意の文字列、「_」は任意の1文字を意味するので「%_%」だと1文字以上の文字列は全部ヒットしてしまいます。
エスケープ文字を使う場合
そこで以下のように_の前にエスケープ文字をつけて「%\_%」とすれば、nameに_が含まれるレコードのみ取得できます。
SELECT * FROM events WHERE name LIKE '%\_%';
railsのメソッドの場合
> 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句はrailsもSQLも似ているな似ているな〜と思いました。