一個謂詞,用于搜索包含基于字符的數(shù)據(jù)類型的列,該列與單個詞和短語,以及與另一個詞一定范圍之內(nèi)的近似詞精確或模糊(不太精確的)匹配或者加權(quán)匹配。CONTAINS 可以搜索:
CONTAINS
(
{ column | *
} , '< contains_search_condition >'
)
< contains_search_condition > ::=
{ < simple_term >
| < prefix_term >
| < generation_term >
| < proximity_term >
| < weighted_term >
}
| { ( < contains_search_condition > )
{ AND | AND NOT | OR } < contains_search_condition > [ ...n ]
}
< simple_term > ::=
word | " phrase "
< prefix term> ::=
{ "word * " | "phrase * " }
< generation_term > ::=
FORMSOF ( INFLECTIONAL , < simple_term > [ ,...n ] )
< proximity_term > ::=
{ < simple_term > | < prefix_term > }
{ { NEAR | ~ } { < simple_term > | < prefix_term > } } [ ...n ]
< weighted_term > ::=
ISABOUT
(
{
{
<simple_term>
| < prefix_term >
| < generation_term >
| < proximity_term >
}
[ WEIGHT ( weight_value ) ]
} [ ,...n ]
)
column
已經(jīng)注冊全文檢索的特定列的名稱。字符串?dāng)?shù)據(jù)類型的列是有效的全文檢索列。
*
指定應(yīng)該使用表中所有已注冊為全文檢索的列,對給定的包含搜索條件進(jìn)行搜索。如果 FROM 子句中有多個表,那么 * 必須由表名限定。
<contains_search_condition>
指定要在 column 中搜索的文本。變量不能用作搜索條件。
word
沒有空格或標(biāo)點符號的字符串。
phrase
在每個詞之間帶有空格的一個或多個詞。
說明 對于某些語言(例如亞洲的一些語言),短語可以由彼此之間沒有空格的一個或多個詞組成。
<simple_term>
指定對每個精確詞(單字節(jié)語言中沒有空格或標(biāo)點符號的一個或多個字符)或短語(單字節(jié)語言中由空格和可選的標(biāo)點符號分隔的一個或多個連續(xù)的詞)的匹配。有效的簡單術(shù)語示例為 "blue berry"、blueberry 和 "Microsoft SQL Server"。應(yīng)該使用雙引號 ("") 將短語括起來。短語中詞出現(xiàn)的順序(在 <contains_search_condition> 中指定)必須與它們出現(xiàn)在數(shù)據(jù)庫列中的順序相同。對詞或短語中字符的搜索是區(qū)分大小寫的。全文索引列中的干擾詞(例如 a、and 或 the)不被存儲在全文索引中。如果在單個詞搜索中使用干擾詞,那么 SQL Server 將返回一個錯誤信息指明查詢中只有干擾詞出現(xiàn)。SQL Server 在目錄 \Mssql\Ftdata\Sqlserver\Config 下包括干擾詞的標(biāo)準(zhǔn)列表。
標(biāo)點符號被忽略。因此,CONTAINS(testing, "computer failure") 將匹配具有 "Where is my computer?Failure to find it would be expensive." 值的行。
<prefix_term>
指定以指定文本開始的匹配詞或短語。將前綴術(shù)語用雙引號 ("") 引起來并在后一個引號前添加一個星號 (*),這樣將匹配在星號前指定的所有以簡單術(shù)語打頭的文本。應(yīng)這樣指定該子句:CONTAINS (column, 'text*') 星號匹配零、一個或多個字符(屬于詞或短語中的詞根或詞)。 如果未用雙引號分隔文本與星號,如 CONTAINS (column, 'text*') 中所示,那么全文檢索將把星號作為字符處理并搜索 text* 的精確匹配項。
當(dāng) <prefix_term> 是一個短語時,短語中包含的每個詞都被認(rèn)為是一個單獨的前綴。因此,指定一個 "local wine *" 前綴術(shù)語的查詢將匹配任何具有 "local winery"、"locally wined and dined" 等文本的行。
< generation_term >
當(dāng)所包含的簡單術(shù)語包括要搜索的原始詞的不同變化時,指定匹配的詞。
在 <generation_term> 中給定的 <simple_term> 將不與名詞和動詞匹配。
<proximity_term>
指定匹配的詞或短語,這些詞或短語必須彼此接近。<proximity_term> 的運算與 AND 運算符相似:兩者都要求在被搜索的列中有多個詞或短語存在。如果 <proximity_term> 中的詞彼此越接近,那么匹配就越好。
a NEAR b NEAR c
這表示詞或短語 a 應(yīng)接近詞或短語 b,而詞或短語 b 應(yīng)接近詞或短語 c。
Microsoft® SQL Server™ 對左右兩邊的詞或短語之間的距離分等級。低等級值(例如 0)指明兩者之間距離較大。如果指定的詞或短語之間相互分開,則認(rèn)為滿足了查詢條件;但是,查詢有一個很低的 (0) 等級值。然而,如果 <contains_search_condition> 僅由一個或多個 NEAR 近似術(shù)語組成,那么 SQL Server 不返回等級值為 0 的行。有關(guān)分等級的更多信息,請參見 CONTAINSTABLE。
<weighted_term>
指定匹配詞和短語列表的匹配行(由查詢返回),可以對每行隨意給定一個加權(quán)值。
AND | AND NOT | OR
指定兩個包含搜索條件之間的邏輯運算。當(dāng) <contains_search_condition> 包含有括號中的組時,首先計算這些組。在計算括號中的組之后,當(dāng)與包含搜索條件一起使用這些邏輯運算符時,應(yīng)用下面的規(guī)則:
n
一個占位符,指明可在其中指定多個包含搜索條件和術(shù)語。
如果兼容級別小于 70,則 CONTAINS 不被看作是關(guān)鍵字。有關(guān)更多信息,請參見 sp_dbcmptlevel。
下面的示例查找包含詞"bottles"且價格為 $15.00 的所有產(chǎn)品。
USE Northwind
GO
SELECT ProductName
FROM Products
WHERE UnitPrice = 15.00
AND CONTAINS(QuantityPerUnit, 'bottles')
GO
下面的示例返回包含短語 "sasquatch ale" 或 "steeleye stout" 的所有產(chǎn)品。
USE Northwind
GO
SELECT ProductName
FROM Products
WHERE CONTAINS(ProductName, ' "sasquatch ale" OR "steeleye stout" ')
GO
下面的示例返回所有滿足該條件的產(chǎn)品名稱:這些產(chǎn)品名稱至少含有一個以 ProductName 列中前輟 Choc 起始的詞。
USE Northwind
GO
SELECT ProductName
FROM Products
WHERE CONTAINS(ProductName, ' "choc*" ')
GO
下面的示例返回包含字符串 "sea" 或 "bread" 的所有分類描述。
USE Northwind
SELECT CategoryName
FROM Categories
WHERE CONTAINS(Description, '"sea*" OR "bread*"')
GO
下面的示例返回在詞 "spread" 附近有詞 "Boysenberry" 的所有產(chǎn)品名稱。
USE Northwind
GO
SELECT ProductName
FROM Products
WHERE CONTAINS(ProductName, 'spread NEAR Boysenberry')
GO
下面的示例搜索具有 dry 形式的詞的所有產(chǎn)品:dried 和 drying 等等。
USE Northwind
GO
SELECT ProductName
FROM Products
WHERE CONTAINS(ProductName, ' FORMSOF (INFLECTIONAL, dry) ')
GO
下面的示例搜索包含詞 spread、sauces 或 relishes 以及給予每個詞不同加權(quán)的所有產(chǎn)品名稱。
USE Northwind
GO
SELECT CategoryName, Description
FROM Categories
WHERE CONTAINS(Description, 'ISABOUT (spread weight (.8),
sauces weight (.4), relishes weight (.2) )' )
GO
下例使用變量而非特定的搜索術(shù)語。
USE pubs
GO
DECLARE @SearchWord varchar(30)
SET @SearchWord ='Moon'
SELECT pr_info FROM pub_info WHERE CONTAINS(pr_info, @SearchWord)
相關(guān)文章