例如,如果我试图获取带有单词“ever”的行,我可以这样做......
SELECT * FROM 'table' WHERE `title` LIKE %ever%
但这也会为我提供带有“永远,然而,永远”字样的标题的结果。
我怎样才能只找到包含“ever”作为自己的单词的标题?
例如,如果我试图获取带有单词“ever”的行,我可以这样做......
SELECT * FROM 'table' WHERE `title` LIKE %ever%
但这也会为我提供带有“永远,然而,永远”字样的标题的结果。
我怎样才能只找到包含“ever”作为自己的单词的标题?
使用REGEXP
正则表达式[[:<:]]word[[:>:]]
在搜索词周围使用单词边界进行匹配:
SELECT * FROM `table` WHERE `title` REGEXP '[[:<:]]ever[[:>:]]'
请注意,默认情况下这是不区分大小写的。为了区分大小写,您需要在BINARY
模式下匹配它:
SELECT * FROM `table` WHERE `title` REGEXP BINARY '[[:<:]]ever[[:>:]]'
由于它不能使用索引,因此在大型表上性能可能会很差。
编辑:对不起,我在那里有 PCRE 边界,MySQL 不支持。
您可以使用REGEXP
和[[:<:]]
和[[:>:]]
字边界标记:
SELECT *
FROM table
WHERE keywords REGEXP '[[:<:]]ever[[:>:]]'