2013-01-04 105 views
3

可能重複:
MySQL - How to search for exact word match using LIKE?如何找到一個確切的單詞而不是單詞的一部分?

例如,如果我試着去獲得與單詞 「曾經」 行,我能做到這一點...

SELECT * FROM 'table' WHERE `title` LIKE %ever% 

但是,這也會給我帶來「永遠,但永遠不會」的字樣。

我怎樣才能找到只包含「永遠」作爲自己的單詞的標題?

+0

已經存在,並回答這個問題一個問題:http://stackoverflow.com/questions/5743177/mysql-how - 要搜索的確切詞匹配使用像 – diggersworld

回答

4

使用REGEXP正則表達式使用在你的搜索詞字邊界[[:<:]]word[[:>:]]匹配:

SELECT * FROM `table` WHERE `title` REGEXP '[[:<:]]ever[[:>:]]' 

注意,這是不區分大小寫的默認。對於區分大小寫,則需要在BINARY模式與之相匹配:

SELECT * FROM `table` WHERE `title` REGEXP BINARY '[[:<:]]ever[[:>:]]' 

,因爲它不能使用索引,性能可以說是相當差的大表上不過。

編輯:對不起,我有PCRE的邊界在那裏,MySQL不支持。

+3

我會注意到,這也是一個很大的桌子上討厭。 – ceejayoz

+0

@NiLe如果您對字符串中至少有一次'ever'感到滿意,您可以執行['instr'](http://www.w3resource.com/mysql/string-functions/mysql-instr- function.php)例如'select * from instr(title,'ever')> 0;''instr'返回字符串中第一個字符串的出現位置。 ;)@MichaelBerkowski就性能而言'instr'比大型表的'regex'要快一些。 – bonCodigo

2

您可以使用REGEXP[[:<:]][[:>:]]字界碑:

SELECT * 
FROM table 
WHERE keywords REGEXP '[[:<:]]ever[[:>:]]' 
相關問題