SQL

2016-03-20 12 views
2

ek karakterleriyle benzer Ben bir MySql tablosunda metinsel arama yapıyorum ve belirli karakterlerle bitebilecek kelimeler bulmak istiyorum.SQL

İşte bir örnek. Arama, clip kelimesi içindir. Sorgumun clip, veya clip? kelimelerini bulmasını ama clipping kelimesini bulmasını istiyorum.

Şimdiye kadar bu denedim budur:

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

da iyi değil kelime clipping bulur.

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

clipping bulmak ama bir virgül, sağ sonra clip, var ve bu benim için de iyi olmadığı zamanlarda da kelime clip görmezden gelmez.

Sorgunun harfleri yoksayar, ancak , veya . veya ? gibi karakterler mi yoksa temel olarak benim seçtiğim başka herhangi bir karakter mi içerdiğini belirtmenin bir yolu var mı?

+0

başlık '% clip_' – Mihai

+0

gibi bu klipte sonra herhangi bir şey ama bir boşluk karakteri ile kelimeleri bulur ki ben kesinlikle ne dahil etmek. – Eddy

cevap

3

Sözcük sınırları eşleşen bir düzenli ifade kullanabilirsiniz: Eğer çok fazla veri varsa ve kendinizi bu gibi aramalarda çok sayıda yaparken buluyorsanız

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

, bu oluşturmak için iyi bir fikir olabilir bir full text index ve sonra match...against kullanın:

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

Bu ans'ı seviyorum. Çok şık. –

+0

@Joni Zaten sütunda tam bir metin dizini var. Sözdizime karşı benim maçım ne olurdu? – Eddy

+0

Cevabı ona ekledim. – Joni

2

REGEXP'u kullanın.

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

Aşağıdaki bir demodur.

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

Bunun için hem arama teriminin başında hem de sonunda nasıl yer açırım? – Eddy

+0

, boşluklarla eşleştirmek istediğiniz bir örnek sağlar? –

+0

Örneğin, ataş beyazdır. Ayrıca kağıt "klipsi" beyazdır. – Eddy