2016-07-21 1 views
4

データベースで検索して、文字列がデータベースの別の文字列の一部と一致するかどうかを確認しようとしています。 2つが正確でilikeを使用している場合は一致させることができますが、文字列の一部だけを検索しているときに、その文字列を含むデータをキャッチしません。ここに私のコードは、クエリのために次のようになります。ilikeを使用してEctoで部分文字列を検索する

servicesstate = Repo.all(from p in Callme.Service, where: ilike(p.locations, ^zip.state)) 

値が正確にされている場合にはマッチします(「サウスカロライナ州」、「サウスカロライナ州」)が、私はそれはのようなものであるとき、それはマッチさせたいです(これはWORないことを

servicesstate = Repo.all(from p in Callme.Service, where: ilike(p.locations, ^"%#{zip.state}%")) 

注:

おかげ

答えて

10

はあなたがLIKE/ILIKEため%構文を使用することができ、 "サウスカロライナ州")、 "サウスカロライナ州に位置します" zip.state%が含まれている場合は正しくkを返します。 %が含まれている場合はthisのようなクエリでEcto.Query.API.fragment/1を使用する必要があります。

+0

すごくトリックでした!データベースを書き直す時間を節約してくれてありがとう! – user2480169

+2

感謝の気持ちを表する最良のアイデアは投票して、あなたの問題の解決策としてこの答えをチェックすることです。 – PatNowak

+0

'ilike(p.locations、^"%#{user_input}% ")'はSQLインジェクションを許可していますか? –

関連する問題