2011-09-12 19 views
1

由于某种原因,我无法在Google上找到答案!但是,使用SQL包含函数,我怎么能告诉它从一个字符串开始,即I.e我正在寻找相当于 LIKE'some_term%'的全文。SQL Contains - 仅在启动时匹配

我知道我可以使用like,但由于我已经设置了全文索引,并且表格预计有数千行,我宁愿使用Contains。

谢谢!

+0

对不起,应该是:LIKE“some_term%” – Umair

+0

但是,这是我所期待的,全文相当于LIKE“someword%”。我只希望它在字符串的开头寻找术语。抱歉混淆。 – Umair

+1

啊 - 确定 - 好,然后检查了Johnie卡尔的回答 - 他展示了如何做到这一点,并有很大的联系,太! –

回答

7

你想是这样的:

而不是指定多个方面,可以使用“前缀术语”如果 术语具有相同字符开头。要使用前缀字词,请指定 开头的字符,然后在该字词的结尾 处添加星号(*)通配符。将前缀术语用双引号括起来。以下 语句返回与上一个相同的结果。

-- Search for all terms that begin with 'storm' 
SELECT StormID, StormHead, StormBody FROM StormyWeather 
WHERE CONTAINS(StormHead, '"storm*"') 

http://www.simple-talk.com/sql/learn-sql-server/full-text-indexing-workbench/

+1

对不起,这是我想要的一半,我知道前缀术语,但它搜索字符串中的所有匹配。我只想开始(像命令LIKE'someterm%')。 – Umair

+0

例如,假设我有包含条目'abcdef'和'g abcdef'的行。然后LIKE'a%'将返回第一个,这正是我想要的。但CONTAINS(列,'“a *”')将同时返回。但我不想第二个,因为a不是第一个字符。希望这是有道理的。 – Umair

+1

@Umair:SQL Server全文搜索不起作用。如果你寻找'a *',它会发现任何以'a'开始的单词 - 它不会看到可能在'a'之前出现的任何单词...... –

0

我能想到的它实际上在前面加上一个独特的词表中的每个字段开头的唯一解决方案。

例如更新每一行,使'xfirstword'出现在文本的开头(例如Field1)。然后你可以搜索CONTAINS(Field1,'NEAR((xfirstword,“TERM *”),0)')

很糟糕的解决方案,尤其是我们知道全文索引存储每个单词的实际位置文字(详见此链接:http://msdn.microsoft.com/en-us/library/ms142551.aspx

0

我正面临类似的问题。这是我作为解决方案而实施的。

  1. 我做了另一个表,只拉了像'some_term%'这样的行。
  2. 现在,在这张新表上我实现了全文搜索。

请你告诉我,如果你尝试了一些其他更好的办法

4

可以使用包含与LIKE子查询匹配仅仅是一个开始:

SELECT * 
FROM (
    SELECT * 
    FROM myTable WHERE CONTAINS('"Alice in wonderland"') 
) AS S1 
WHERE S1.edition LIKE 'Alice in wonderland%' 

这样,慢的像查询将被打击较小的运行设置

相关问题