Wie kann ich mit SQL auch nach Wort-Teilen suchen?

4 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Im Suchargument kann man den String sowohl vorne als auch hinten mit dem %-Zeichen begrenzen, bei manchen Systemen auch in der Mitte als Wildcard. Wenn nur nach hinten begrenzt wird und auf dem Feld ist ein Index, so wird im Index nur in dem Bereich gesucht, der relevant ist. Wird auch nach vorne begrenzt, müssen alle Eintragungen geprüft werden. Man sollte also nach vorne nur begrenzen, wenn es wirklich erforderlich ist. Bei kleinen Datenmengen spielt das kaum eine Rolle.

Hier in diesem Beispiel kann mit 'Bei%' der Wert 'Beispiel' gefunden werden. Mit '%Bei%' auch, kann aber länger dauern. Bei meiner Datenbank wird zwischen Klein- und Großschreibung unterschieden. Ein %-Zeichen in der Mitte geht auch. Das habe ich gerade ausprobiert.


wotan38  07.03.2017, 11:21

Danke für die Auszeichnung!

Durch die Wildcards * und % (oder & -- weis ich gerade nicht genau)

Select * from tabelle where word = 'bei%';

-- ausprobieren

oder mit LIKE (da kenne ich die Syntax gerade aber nicht, höchstwahrscheinlich wie folgt -- ausporbieren)

Select * from tabelle where word LIKE 'bei%';

SELECT * FROM sometable WHERE name LIKE '%bei%'

In dem Fall würde auch beispiel gefunden aber auch Beispiel oder bEispiel


wotan38  07.03.2017, 11:20

So würde das nicht gehen, weil 'Beispiel' gross geschrieben in der Datenbank steht. In MySql gibt es aber eine Funktion, mit der man die gefundenen Werte vor dem Vergleich umwandeln kann. Ich weiß den Namen dieser Funktion nicht, nehme mal an, er heißt LOW. Dann hieße der LIKE

WHERE LOW(name) LIKE '%bei%'

So würde auch 'Beispiel' gefunden.

Wonach man sucht, gibt man in der WHERE Clausel an. Teilsequenzen kann man durch like suchen also z.B.

 SELECT * FROM T WHERE T.A LIKE '%bei%';

Wobei % bei like ein Platzhalter für eine beliebige Zeichenfolge ist.