2013-04-05 26 views
1

我有一个查询。是否有任何内置函数或任何其他与MySQL相关的方法,它将返回数据库表字段中包含EXACT字的行?我知道,使用MySQL LIKE运算符,您可以在列中搜索指定模式,该列将匹配包含通配符字符的模式字符串的字符串值。但是使用MySQL LIKE子句,它也会返回子字符串条目。MySQL确切的词存在检查表中字段

例如,

假设3倍中的值象下面这样:

1. "Take another shot of courage" 

2. "The End of This age is Not Yet" 

3. "Employers can obtain this wage rate by submitting a request" 

我想要检索的列值包含确切的词“时代”

所有行如果我们像这样

SELECT * FROM sometable WHERE somefield LIKE '%age%' 
准备查询

它会返回所有三行。但我的意图只是获得第二排。我们如何实现这一目标?提前致谢。

干杯,
JENSon。

+1

如果总是会有一个空间之前和之后的年龄,为什么不使用LIKE“%年龄%” – 2013-04-05 10:46:02

+2

将两个空间之前和之后的年龄,看看作品。我的意思是'%age%' – 2013-04-05 10:48:05

+0

阅读全文搜索,'%age%'对我来说不是解决方案。 – mkjasinski 2013-04-05 10:48:32

回答

6

使用此查询

SELECT * FROM sometable WHERE somefield LIKE '% age %' 
OR somefield LIKE 'age %' OR somefield LIKE '% age' 
+1

给我贴了邮件! – 2013-04-05 10:49:50

+0

+1为此答案.. :) – 2013-04-05 10:59:19

2

试试这个

1 SELECT * FROM sometable WHERE somefield LIKE '% age %' to search in middle of string 

2 SELECT * FROM sometable WHERE somefield LIKE '% age' if word is at end of string 

3 SELECT * FROM sometable WHERE somefield LIKE 'age %' if your word is at starting of the string 
5

您可以使用MySQL的正则表达式引擎并匹配单词边界字符[[:<:]][[:>:]]

这将匹配age但不couragewageaged。它也将匹配-age-或其他任何其他行的文本age包围非字字符的年龄。这意味着它将在字符串的开头和结尾匹配age

在我看来,这比阅读三个条件要复杂一点。如果返回像-age-这样的匹配是可以接受的,那么你可以考虑这个。

我还没有测试过这个查询的性能或可移植性,所以你也可以考虑这个。

SELECT * FROM sometable WHERE somefield RLIKE '[[:<:]]age[[:>:]]';