2016-07-21 5 views
4

Ich versuche in einer Datenbank zu suchen, um zu sehen, ob eine Zeichenfolge Teil einer anderen Zeichenfolge in der Datenbank übereinstimmt. Ich kann es erreichen, wenn die beiden genau sind mit ilike, aber wenn ich nur nach einem Teil der Zeichenfolge suche, fängt es keine Daten, die es enthalten. Hier ist, was mein Code sieht aus wie für die Abfrage:Suchen nach partiellen Strings in Ecto mit ilike

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

Es wird passen, wenn die Werte genau sind („South Carolina“, „South Carolina“), aber ich möchte es passen, wenn es so etwas wie ist ("das Hotel liegt in South Carolina", "South Carolina")

Dank

Antwort

10

können Sie verwenden, um die % Syntax für LIKE/ILIKE:

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

Beachten Sie, dass dies nicht wor k korrekt, wenn zip.state eine % enthält. Wenn es % enthalten kann, müssen Sie Ecto.Query.API.fragment/1 mit einer Abfrage wie this verwenden.

+0

Super, dass der Trick! Danke, dass Sie mir Stunden beim Neuschreiben von Datenbanken erspart haben! – user2480169

+2

Die beste Idee, um Wertschätzung auszudrücken, ist zu wählen und auch diese Antwort als eine Lösung Ihres Problems zu überprüfen. – PatNowak

+0

Ermöglicht 'ilike (p.locations,^"% # {user_input}%") 'SQL-Injektion? –

Verwandte Themen