【问题标题】:MySQL exact word existence check in a table Field表字段中的 MySQL 确切单词是否存在检查
【发布时间】:2013-03-27 17:56:31
【问题描述】:

我有一个问题。是否有任何与 MySQL 相关的内置函数或任何其他方法,它将返回在数据库表字段中包含 EXACT 单词的行?我知道使用 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"

我想检索列值包含确切单词“年龄”的所有行

如果我们像这样准备查询

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

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

干杯,
简森。

【问题讨论】:

  • 如果age前后总会有空格,何不使用LIKE ' %age% '
  • 年龄前后放置两个空格,看看是否有效。我的意思是% age %
  • 阅读全文搜索,% age % 不是我的解决方案。
  • SELECT * FROM sometable WHERE somefield LIKE '% age %' 适用于大多数情况,但“年龄某事”和“某事年龄”除外
  • @YogeshSuthar 完成..:)

标签: php mysql where-clause sql-like


【解决方案1】:

试试这个

  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 

【讨论】:

    【解决方案2】:

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

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

    在我看来,这比具有三个条件要简单一些。如果返回 -age- 之类的匹配项是可以接受的,那么您可以考虑这样做。

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

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

    【讨论】:

      【解决方案3】:

      使用这个查询

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-24
        • 1970-01-01
        • 2014-11-16
        • 2014-02-09
        • 2014-02-26
        • 2010-09-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多