【问题标题】:Match only entire words with LIKE?仅将整个单词与 LIKE 匹配?
【发布时间】:2011-09-11 03:27:00
【问题描述】:

所以 'awesome document' LIKE '%doc%' 是真的,因为 doc 是一个子字符串。但是,我希望它是假的,而“真棒文档”或“真棒文档”或“真棒文档真棒”应该是真的。点赞怎么办?

我正在使用 sqlite,所以我希望我不必使用不可用的东西。

【问题讨论】:

标签: sql sqlite sql-like


【解决方案1】:

把它分成四部分怎么样 -

[MyColumn] Like '% doc %' 
OR [MyColumn] Like '% doc' 
OR [MyColumn] Like 'doc %' 
OR [MyColumn] = 'doc'

编辑:另一种方法(仅适用于 ascii 字符)可能是:

'#'+[MyColumn]+'#' like '%[^a-z0-9]doc[^a-z0-9]%'

(您可能还需要处理任何特殊字符)

看起来不像,但您可能想探索Full Text SearchContains,以防它们更适合您的情况。

见: - MSDN: [ ] (Wildcard - Character(s) to Match) (Transact-SQL)

【讨论】:

  • +1 因为这是我能想到的唯一方法,但它让我颤抖。
  • 不要忘记字符串只是'doc'的情况。
  • (查看其他关于“doc”匹配大小写的答案)。
  • 如果我有一个以“doc”开头的句子,后面有一个逗号(例如:“doc,thank you!”),我认为它无法搜索
【解决方案2】:

你可以使用以下条件:

(' '+YOUR_FIELD_NAME+' ') like '% doc %'

它比其他解决方案运行得更快。

【讨论】:

  • 如果单词是“doc”怎么办?
  • @Zeeshanef 没什么,它只是工作 ' ' + 'doc' + ' ' 适合 '% doc %'
【解决方案3】:
WHERE (@string LIKE 'doc %' OR @string LIKE '% doc' OR @string LIKE '% doc %' OR @string = 'doc')

【讨论】:

    【解决方案4】:

    你可以使用一些 OR,LIKE '% doc %' OR LIKE 'doc %' OR LIKE '% doc' OR LIKE 'doc'

    【讨论】:

    • +1 用于包含“doc”大小写,但最好写成=
    【解决方案5】:

    没有一个答案对我有用(SQL Server 2008 R2)。

    但我设法使用下面显示的一些答案让它工作..

    SELECT * FROM myTable AS v
    WHERE v.Note LIKE '%[^a-zA-Z0-9]CONTainers[^a-zA-Z0-9]%'
    

    注意: v.Note 是一个 TEXT 数据类型

    以下示例对我有用..

    • 容器
    • 容器
    • 容器

    但不是当“容器”这个词被其他字母或数字包围时......

    • 001containers001
    • AAcontainersAA

    这是 OP 首先要求的。

    【讨论】:

      【解决方案6】:

      LIKE 非常有限。我建议使用 REGEXP,例如:

       columnName REGEXP 'doc[;.?!,") ]'
      

      例如:awesome document 不匹配,但是 很棒的文档文档真棒, awesome doc awesome 将匹配。

      它还将匹配文本中的现有单词,后跟标点符号。 您可以在这里尝试任何示例:https://regexr.com/

      【讨论】:

        【解决方案7】:

        您可以将正则表达式与“单词边界”MySql documentation一起使用

        所以,在你的例子中:'awesome document' REGEXP '\bdoc\b'

        【讨论】:

          【解决方案8】:

          NOT LIKE '%doc%' 呢?

          【讨论】:

          • 任务是只找到单词“DOC”——而不是像“DOCument”中那样的部分单词
          • 我认为问题是使用 LIKE 来匹配整个单词,而不是作为另一个单词的一部分。
          猜你喜欢
          • 2020-08-30
          • 1970-01-01
          • 2012-03-29
          • 2012-06-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-13
          相关资源
          最近更新 更多