SQL 包含问题

Posted

技术标签:

【中文标题】SQL 包含问题【英文标题】:SQL Contains Question 【发布时间】:2011-10-21 04:39:45 【问题描述】:

谁能给我解释一下?我在下面有两个查询及其结果。


查询

select * from tbl where contains([name], '"*he*" AND "*ca*"')

结果集

赫兹租车

海明威的小酒馆


查询

select * from tbl where contains([name], '"*he*" AND "*ar*"')

结果集

什么都没有


第一个查询是我所期望的,但我希望第二个查询返回“Hertz Car Rental”。我是否从根本上误解了“*”在全文搜索中的工作原理?

谢谢!

【问题讨论】:

【参考方案1】:

我认为 SQL Server 将您的字符串解释为 prefix_terms。星号不是普通的旧通配符说明符。全文和包含是面向单词的。对于您正在尝试做的事情,最好使用普通的旧 LIKE 而不是 CONTAINS。

http://msdn.microsoft.com/en-us/library/ms187787.aspx

【讨论】:

+1 '*' 通配符只能用于前缀匹配,第一个示例中必须忽略模式字符串中的第一个。 @hatchet 推荐 LIKE 来代替这种用法是正确的(或者如果你想要真正的“模糊”匹配,就把通配符放在一起?) 我想我从根本上误解了一切,不是吗。感谢大家的澄清。我想我们将只进行前缀搜索,因为我们已经确定 LIKE 的性能不够。【参考方案2】:

"*" 仅用作后缀。如果使用它作为前缀,则无论如何都需要扫描表,并且索引是无用的。到时候你也可以这样做

  Select * From Table Where (Name Like '%he%') And (Name Like '%ar%')

【讨论】:

【参考方案3】:

我会尝试用 % 替换 * 来看看效果如何。

select * from tbl where contains([name], '"%he%" AND "%ar%"') 

【讨论】:

那没有任何作用。 CONTAINS 不是 LIKE。 % vs * 似乎没有破坏第一个查询;为什么会搞砸第二个?

以上是关于SQL 包含问题的主要内容,如果未能解决你的问题,请参考以下文章

包含包含的 Excel VBA SQL 语句

SQL 包含问题

SQL 包含存储过程中的问题

sql语句包含怎么写

SQL返回一个字段包含相同数据但其他字段包含不同数据的行

何时在包含 JOIN 和聚合的 SQL 查询中使用 *?