所以'很棒的文档'LIKE'%doc%'是真的,因为doc是一个子字符串。但是,我希望它是假的,而'真棒医生'或'doc awesome'或'awesome doc awesome'应该是真的。我该怎么做?
我正在使用sqlite,所以我希望我不必使用不可用的东西。
答案 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 Search和Contains,以防更适合您的情况。
请参阅: - 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数据类型
这对我来说适用于以下示例。
但是当“容器”一词被其他字母或数字包围时,则不会。
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%'
怎么样?