SQL包含 - 仅在开始时匹配

时间:2011-09-12 13:15:32

标签: sql sql-server tsql full-text-search

出于某种原因,我无法在Google上找到答案!但是使用SQL包含函数我怎么能告诉它从字符串的开头开始,即我正在寻找相当于全文的全文      喜欢'some_term%'。

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

谢谢!

4 个答案:

答案 0 :(得分: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 :(得分:5)

您可以将CONTAINS与LIKE子查询一起使用,以仅匹配一个开头:

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

这样,慢LIKE查询将针对较小的集合

运行

答案 2 :(得分:0)

我能想到的唯一解决方案是将一个独特的单词预先添加到表格中每个字段的开头。

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

非常糟糕的解决方案,特别是因为我们知道全文索引存储了文本中每个单词的实际位置(有关详细信息,请参阅此链接:http://msdn.microsoft.com/en-us/library/ms142551.aspx

答案 3 :(得分:0)

我正面临类似的问题。这就是我作为一种解决方案实现的。

  1. 我创建了另一个表,只拉出了像'some_term%'这样的行。
  2. 现在,在这个新表上,我实现了FullText搜索。
  3. 如果你尝试了其他更好的方法,请告诉我