2016-03-20 8 views
2

Я занимаюсь текстовым поиском в таблице MySql, и я хочу найти слова, которые могут заканчиваться определенными символами.SQL как с дополнительными символами

Вот пример. Вы искали для слова clip. Я хочу, чтобы мой запрос нашел слово clip, или clip?, но не слово clipping.

До сих пор это то, что я пробовал:

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

также находит слово clipping, что не есть хорошо.

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

не находит clipping, но и игнорирует слово clip, когда есть запятая сразу после него, clip, и это тоже не хорошо для меня.

Есть ли способ указать, что запрос игнорирует буквы, но включают символы, такие как , или . или ? или в основном любой другой символ, который я выбираю?

+0

озаглавить как «% clip_» – Mihai

+0

Это находит слова с чем-либо после клипа, но не символ пробела, который я определенно пе чтобы включить. – Eddy

ответ

3

Вы можете использовать регулярное выражение, которое соответствует границы слова:

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

Если у вас есть много данных, и найти себе делать много запросов, как это, может быть хорошей идеей, чтобы создать full text index, а затем использовать match...against:

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

Мне это нравится. Так элегантно. –

+0

@Joni У меня уже есть полный текстовый индекс в столбце. Каким будет мой матч против синтаксиса? – Eddy

+0

Я добавил его к ответу. – Joni

2

Использование REGEXP.

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

Следующая демонстрация.

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

Как добавить место для этого как в начале, так и в конце поискового запроса? – Eddy

+0

укажите образец, который вы хотите сопоставить с пробелами? –

+0

Например, скрепка для бумаг - белая. Также бумага «клип» является белой. – Eddy

Смежные вопросы