在MySQL表字段中检查确切单词是否存在

3

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

例如。

假设有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"

我希望检索包含确切单词“age”的列值的所有行。

如果我们准备这样的查询

SELECT * FROM sometable WHERE somefield LIKE '%age%'

它将返回所有三行。但我的意图只是获取第二行。我们怎样才能实现这一点呢?谢谢您的帮助。

祝好,
JENSon.


1
如果年龄前后总是有一个空格,为什么不使用 LIKE ' %age% ' 呢? - fizzy drink
2
在 age 前后各加两个空格,看看是否有效。我的意思是 % age % - user2193789
阅读有关全文搜索的内容,% age% 对我来说不是解决方案。 - mkjasinski
1
SELECT * FROM sometable WHERE somefield LIKE '% age %' 适用于大多数情况,但不包括 "age something" 和 "something age"。 - Anthony Palmer
@fizzy drink:我没有看到你已经提出了相同的想法。对于重复,我很抱歉。但从理论上讲,它应该是可行的。谢谢。 - user2193789
@JensonMJohn 接受解决你问题的答案... :) - Yogesh Suthar
3个回答

6

使用此查询

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

6
您可以使用MySQL的正则表达式引擎并匹配单词边界字符[[:<:]][[:>:]]。这将匹配age但不匹配couragewageaged。它还将匹配-age-中的年龄或文本age非单词字符包围的任何其他行。这意味着它将匹配字符串的开头和结尾处的age
在我看来,这种方式比有三个条件更容易阅读。如果接受返回像-age-这样的匹配,则可以考虑使用此方法。
我也没有测试过此查询的性能或可移植性,因此您可能需要考虑这一点。
SELECT * FROM sometable WHERE somefield RLIKE '[[:<:]]age[[:>:]]';

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 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接