【发布时间】:2011-09-11 03:27:00
【问题描述】:
所以 'awesome document' LIKE '%doc%' 是真的,因为 doc 是一个子字符串。但是,我希望它是假的,而“真棒文档”或“真棒文档”或“真棒文档真棒”应该是真的。点赞怎么办?
我正在使用 sqlite,所以我希望我不必使用不可用的东西。
【问题讨论】:
-
标点符号等其他字符呢?
所以 'awesome document' LIKE '%doc%' 是真的,因为 doc 是一个子字符串。但是,我希望它是假的,而“真棒文档”或“真棒文档”或“真棒文档真棒”应该是真的。点赞怎么办?
我正在使用 sqlite,所以我希望我不必使用不可用的东西。
【问题讨论】:
把它分成四部分怎么样 -
[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)
【讨论】:
你可以使用以下条件:
(' '+YOUR_FIELD_NAME+' ') like '% doc %'
它比其他解决方案运行得更快。
【讨论】:
WHERE (@string LIKE 'doc %' OR @string LIKE '% doc' OR @string LIKE '% doc %' OR @string = 'doc')
【讨论】:
你可以使用一些 OR,LIKE '% doc %' OR LIKE 'doc %' OR LIKE '% doc' OR LIKE 'doc'
【讨论】:
=。
没有一个答案对我有用(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 首先要求的。
【讨论】:
LIKE 非常有限。我建议使用 REGEXP,例如:
columnName REGEXP 'doc[;.?!,") ]'
例如:awesome document 不匹配,但是 很棒的文档, 文档真棒, awesome doc awesome 将匹配。
它还将匹配文本中的现有单词,后跟标点符号。 您可以在这里尝试任何示例:https://regexr.com/
【讨论】:
您可以将正则表达式与“单词边界”MySql documentation一起使用
所以,在你的例子中:'awesome document' REGEXP '\bdoc\b'
【讨论】:
NOT LIKE '%doc%' 呢?
【讨论】: