Help us understand the problem. What is going on with this article?

Rails - LIKE句を使った文字のあいまい検索(特定の文字を含む語句を曖昧検索したい場合)

特定の文字を含む語句を特定のカラムに持ったレコードを検索したい時。

仕事でRailsで文字列検索をする必要があったので、忘備録的にシェアします。

LIKE句の基本(完全一致検索)

まず文字検索をしたい時はLIKE句を使います。

モデル名.where('カラム名 like ?','検索したい文字列')

これで検索したい文字列列に完全一致するカラムを抽出します。

前方一致

検索したい文字列が前方一致するカラムを持ったレコードを探したい時は
ワイルドカードである「%」あるいは「_」を使います。

それぞれの意味は
- % 任意の0文字以上の文字列
- _ 任意の1文字

モデル名.where('カラム名 like ?','検索したい文字列%')前方一致
モデル名.where('カラム名 like ?','検索したい文字列_')後ろに一文字だけ付いている前方一致

後方一致

検索したい文字列が後方一致するカラムを持ったレコードを探したい時は

モデル名.where('カラム名 like ?','%検索したい文字列')後方一致
モデル名.where('カラム名 like ?','_検索したい文字列')先頭に一文字だけ付いている後方一致

特定の文字を含む語句を曖昧検索したい場合(部分一致)

検索したい文字列が文字列の一部で使われているカラムを持ったレコードを探したい時は

モデル名.where('カラム名 like ?','%検索したい文字列%')文字列のどの部分にでも検索したい文字列が含まれていればOK
モデル名.where('カラム名 like ?','_検索したい文字列_')先頭と後方に一文字だけ何か文字が付いていて、検索したい文字列が中間にある場合。

例えば上の部分一致を使った例を出すと

モデル名.where('content like ?','%こんにちは%')

この書き方だと、あるモデルのcontentカラムの文字列データのどこかの部分に「こんにちは」と含まれているレコードを抽出できる。

seri1234
Web系自社サービス企業で主にRailsエンジニアとして働いています。 日々のアウトプット用に記事書いていきます。 Railsチュートリアルを作って下さった、原著のマイケル・ハートル氏と、安川氏を始めとする翻訳版制作協力者に感謝。 RubyOnRails, JavaScript(es6), React使ってます
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした