2011-03-09 91 views
0

我的全文搜索有什么问题?如果此代码SQL全文搜索问题

Select UserID, UserName 
From Users 
Where Contains([UserName], '%Jack%') 

我得到了用户接口回来,但如果我这样做

Select UserID, UserName 
From Users 
Where Contains([UserName], '%Ja%') 

我什么也没得到什么我做错了吗?

回答

3

您正在将LIKE语法与CONTAINS混合使用。请记住,全文搜索是基于单词的,而搜索字符串中的字符模式。

尝试:

Select UserID, UserName 
From Users 
Where Contains([UserName], '"Ja*"') 
+0

然后执行搜索的最佳方法是什么?使用Fulltext或Like,因为我希望用户能够搜索6个不同的列,并且如果它们中的任何一个匹配,则返回该行。 – Bob1254 2011-03-09 21:09:34

+0

假设您正在搜索单词或单词的前缀,则全文搜索速度会快得多。如果你想查找字符片段(例如'server'中的'rv'),那么你需要依赖Like。 – 2011-03-09 21:20:15

0

Contains([UserName], '"Ja*"') - 语法前缀搜索。将匹配“杰克”,但不是“阿贾克斯”

您不能使用全文搜索进行任何POSTFIX搜索。如果你尝试:

Contains([UserName], '"*Ja*"') -- wrapped in * 

这实际上还是做前缀仅搜索,它会去掉所有特殊字符不正确的语法,这意味着第一个*将被剥离,然后跑了。如果您需要开放式搜索,则需要使用%%来查找内部部分或单词。