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