只用LIKE匹配整个单词?

时间:2011-06-08 18:56:13

标签: sql sqlite sql-like

所以'很棒的文档'LIKE'%doc%'是真的,因为doc是一个子字符串。但是,我希望它是假的,而'真棒医生'或'doc awesome'或'awesome doc awesome'应该是真的。我该怎么做?

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

8 个答案:

答案 0 :(得分:31)

如何将其分成四个部分 -

[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 :(得分:6)

WHERE (@string LIKE 'doc %' OR @string LIKE '% doc' OR @string LIKE '% doc %' OR @string = 'doc')

答案 2 :(得分:2)

您可以使用以下条件:

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

它的工作速度比其他解决方案要快。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

没有一个答案对我有用(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数据类型

这对我来说适用于以下示例。

  • 容器
  • 容器
  • conTaInERS

但是当“容器”一词被其他字母或数字包围时,则不会。

  • 001containers001
  • AAcontainersAA

OP首先要求的是什么。

答案 5 :(得分:0)

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

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

例如:很棒的文档不匹配,但是 很棒的文档 doc 很棒, 很棒的 doc 会匹配。

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

答案 6 :(得分:0)

您可以将 REGEX 与“词边界”一起使用 MySql documentation

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

答案 7 :(得分:-4)

NOT LIKE '%doc%'怎么样?