2016-03-20 9 views
2

Ich mache eine Textsuche auf einer MySql Tabelle und ich möchte Wörter finden, die mit bestimmten Zeichen enden können.SQL wie mit zusätzlichen Zeichen

Hier ist ein Beispiel. Die Suche erfolgt nach dem Wort clip. Ich möchte, dass meine Abfrage das Wort clip, oder clip? findet, aber nicht das Wort clipping.

Bisher das ist, was ich versucht:

select * from product where title like '%clip%' 

findet auch das Wort clipping, was nicht gut ist.

select * from product where title like '% clip %' 

nicht clipping finden, sondern ignoriert auch das Wort clip, wenn ein Komma nach rechts, es ist da, clip, und das ist auch nicht gut für mich.

Gibt es eine Möglichkeit, um anzugeben, dass die Abfrage Buchstaben ignorieren würde, aber sind Zeichen wie , oder . oder ? oder im Grunde jedes andere Zeichen ich wählen?

+0

Titel wie ‚% clip_‘ – Mihai

+0

Dies findet Wörter mit etwas nach Clip aber nicht ein Leerzeichen, die ich auf jeden Fall ne ed zu umfassen. – Eddy

Antwort

3

Sie können einen regulären Ausdruck verwenden, die Wortgrenzen übereinstimmt:

... where title regexp '[[:<:]]clip[[:>:]]' 

Wenn Sie eine Menge Daten haben und finden sich viele Suchanfragen wie dies zu tun, kann es eine gute Idee sein, zu schaffen ein full text index und verwenden Sie dann match...against:

... where match(title) against ('clip'); 
+0

Ich mag dieses ans. So elegant. –

+0

@Joni Ich habe bereits einen Volltextindex für die Spalte. Was wäre meine Übereinstimmung mit der Syntax? – Eddy

+0

Ich habe es zur Antwort hinzugefügt. – Joni

2

Verwenden Sie REGEXP.

where title REGEXP '.* clip[,.? ].*' 

Das Folgende ist eine Demo.

mysql> select 'the paper clip is white' REGEXP '.* clip[,.? ].*'; 
+----------------------------------------------------+ 
| 'the paper clip is white' REGEXP '.* clip[,.? ].*' | 
+----------------------------------------------------+ 
|             1 | 
+----------------------------------------------------+ 
1 row in set (0.00 sec) 

mysql> select 'the paper clip? is white' REGEXP '.* clip[,.? ].*'; 
+-----------------------------------------------------+ 
| 'the paper clip? is white' REGEXP '.* clip[,.? ].*' | 
+-----------------------------------------------------+ 
|             1 | 
+-----------------------------------------------------+ 
1 row in set (0.00 sec) 

mysql> select 'the paper clipping is white' REGEXP '.* clip[,.? ].*'; 
+--------------------------------------------------------+ 
| 'the paper clipping is white' REGEXP '.* clip[,.? ].*' | 
+--------------------------------------------------------+ 
|              0 | 
+--------------------------------------------------------+ 
1 row in set (0.00 sec) 

mysql> select 'the paper clipis white' REGEXP '.* clip[,.? ].*'; 
+---------------------------------------------------+ 
| 'the paper clipis white' REGEXP '.* clip[,.? ].*' | 
+---------------------------------------------------+ 
|             0 | 
+---------------------------------------------------+ 
1 row in set (0.00 sec) 
+0

Wie füge ich sowohl am Anfang als auch am Ende des Suchbegriffs Leerzeichen hinzu? – Eddy

+0

bieten Sie ein Beispiel, das Sie mit Leerzeichen übereinstimmen möchten? –

+0

Zum Beispiel ist die Büroklammer weiß. Auch der Papierclip ist weiß. – Eddy

Verwandte Themen