JPQL-Query like

Hi,

in der Tabelle Article ist z.B. folgendes drin:

Artikelnummer | Artikelname
003421 | Buttermilch
003410 | Butter
003512 | Milch
012345 | Schokolade
011340 | Vollmilchschokolade

Nun habe ich ein
Code:
org.eclipse.swt.widgets.Text
erstellt und einen
Code:
org.eclipse.swt.widgets.Button
erstellt.

Diese Abfrage ...

Java:
Query q = em.createQuery("FROM Article a WHERE a.name like :name OR a.number like :number");

funktioniert perfekt, wenn ich exakt die Artikelnummer (ist ein String) oder den Artikelnamen in die Suchmaske eingebe. Ich möchte aber auch z.B. Buttermilch, Butter und Milch ausgegeben haben, wenn ich in die Suchleiste nur 00 eingebe.
Oder zum Beispiel Buttermilch und Butter, wenn ich "Butter" eingebe.

Wie realisiere ich das?
 
hast du dich je irgendwo grundsätzlich informiert wie LIKE in SQL funktioniert,
oder ist die erste Alternative, dir das hier im Forum aufwendig von jemanden erzählen zu lassen?

SQL LIKE

wenn du noch Groß-/ Kleinschreibung ignorieren willst, lautet die nächste Suchmaschinensuche 'sql like ignore case' 😉
 
Zuletzt bearbeitet von einem Moderator:
hast du dich je irgendwo grundsätzlich informiert wie LIKE in SQL funktioniert,
oder ist die erste Alternative, dir das hier im Forum aufwendig von jemanden erzählen zu lassen?

Als ob ich das, was du da verlinkt hast, schon nicht versucht hätte - bin ja nicht total bescheuert. Ich eröffne doch keinen Thread, bevor ich mich nicht selbst an die Aufgabe rangesetzt habe.

Übrigens funktioniert so etwas:

Java:
Query q = em.createQuery("FROM Article a WHERE a.name like %:name% OR a.number like :number%");

und das

Java:
Query q = em.createQuery("FROM Article a WHERE a.name like '%:name%' OR a.number like ':number%' ");

absolut gar nicht. Daher auch meine Frage.
 
also bei den Versuchen würde ich an deiner Stelle deinen eigenen Geisteszustand lieber nicht beurteilen,
aber nun genug der Gemeinheiten, sorry 😉

:name ist der Parameter für ALLES, die % müssen dort hinein, was dort als Parameter übergeben wird,
um Anführungszeichen musst du dich dabei überhaupt nicht kümmern

anders wäre es bei manuellen Zusammenbau, Beispiel
Java:
String x = "Butter";
Query q = em.createQuery("FROM Article a WHERE a.name like '%"+x+"%'";
aber das sollte lieber gar nicht erst versucht werden, :name ist viel besser, in den Parameter das %

was ist number eigentlich für ein Datentyp? LIKE ist eher nur für Text zu gebrauchen
 
also bei den Versuchen würde ich an deiner Stelle deinen eigenen Geisteszustand lieber nicht beurteilen,
aber nun genug der Gemeinheiten, sorry 😉

Darauf antworte ich nun wirklich nicht...

:name ist der Parameter für ALLES, die % müssen dort hinein, was dort als Parameter übergeben wird,
um Anführungszeichen musst du dich dabei überhaupt nicht kümmern

anders wäre es bei manuellen Zusammenbau, Beispiel
Java:
String x = "Butter";
Query q = em.createQuery("FROM Article a WHERE a.name like '%"+x+"%'";
aber das sollte lieber gar nicht erst versucht werden, :name ist viel besser, in den Parameter das %

Aha! Jetzt geht mir ein Licht auf. Wieso nicht gleich so, sondern erst mal paar Seitenhiebe austeilen? 😉

was ist number eigentlich für ein Datentyp? LIKE ist eher nur für Text zu gebrauchen

Soll ich so antworten wie du? 😀 Schrieb ich oben in Klammern, welchen Datentypen number hat. 😉 Die Artikelnummer ist deswegen ein String, weil manche Artikelnummern auch Buchstaben enthalten.

Danke für deine Antwort nochmals.
 
Aha! Jetzt geht mir ein Licht auf. Wieso nicht gleich so, sondern erst mal paar Seitenhiebe austeilen? 😉
eben weil du nicht mit allen Informationen rausrückst, am Anfang nicht mit einem Wort erwähnt hast dass die % überhaupt bekannt ist

wenn du statt nebulösen
> Ich möchte aber auch z.B. Buttermilch, Butter und Milch ausgegeben haben
eher "ich bekomme bei mir die wohlbekannte %-Funktionialität von LIKE mit folgenden Versuchen nicht zum Laufen"
geschrieben hättest, wäre das Thema ganz anders verlaufen
 

Zurück
Oben