#特定の文字を含む語句を特定のカラムに持ったレコードを検索したい時。
仕事でRailsで文字列検索をする必要があったので、忘備録的にシェアします。
LIKE句の基本(完全一致検索)
まず文字検索をしたい時はLIKE句を使います。
モデル名.where('カラム名 like ?','検索したい文字列')
これで検索したい文字列列に完全一致するカラムを抽出します。
前方一致
検索したい文字列が前方一致するカラムを持ったレコードを探したい時は
ワイルドカードである「%」あるいは「_」を使います。
それぞれの意味は
- % 任意の0文字以上の文字列
- _ 任意の1文字
モデル名.where('カラム名 like ?','検索したい文字列%')前方一致
モデル名.where('カラム名 like ?','検索したい文字列_')後ろに一文字だけ付いている前方一致
##後方一致
検索したい文字列が後方一致するカラムを持ったレコードを探したい時は
モデル名.where('カラム名 like ?','%検索したい文字列')後方一致
モデル名.where('カラム名 like ?','_検索したい文字列')先頭に一文字だけ付いている後方一致
##特定の文字を含む語句を曖昧検索したい場合(部分一致)
検索したい文字列が文字列の一部で使われているカラムを持ったレコードを探したい時は
モデル名.where('カラム名 like ?','%検索したい文字列%')文字列のどの部分にでも検索したい文字列が含まれていればOK
モデル名.where('カラム名 like ?','_検索したい文字列_')先頭と後方に一文字だけ何か文字が付いていて、検索したい文字列が中間にある場合。
例えば上の部分一致を使った例を出すと
モデル名.where('content like ?','%こんにちは%')
この書き方だと、あるモデルのcontentカラムの文字列データのどこかの部分に「こんにちは」と含まれているレコードを抽出できる。