CONTAINS (Transact-SQL)
WHERE yan tümcesinde karakter tabanlı veri türleri içeren sütunlarda kesin veya belirsiz (daha az kesin) arama yaparak tek sözcükleri veya tümcecikleri eşleştirmek, birbirine belirli uzaklıktaki sözcüklerin yakınlığını veya ağırlıklı eşleşmeleri bulmak için kullanılan bir önkoşul.
Içinde SQL Server, bağlantılı sunucuların sorguları yürütmek için tam metin yüklemler CONTAINS veya FREETEXT four-part adları kullanabilirsiniz.
CONTAINS şunları arayabilir:
Bir sözcük veya tümcecik.
Bir sözcüğün veya tümceciğin öneki.
Bir sözcüğün yakınındaki başka bir sözcük.
Başka bir sözcükten türetilmiş bir sözcük (örneğin, sür sözcüğü, sürer, sürdü ve sürülen sözcüklerinin türetme köküdür).
Eş anlamlılar sözlüğü kullanılarak başka bir sözcüğün eş anlamlısı olan bir sözcük (örneğin, metal sözcüğünün alüminyum ve çelik ile eş anlamlıları olabilir).
CONTAINS
( { column_name | ( column_list ) | * }
, '<contains_search_condition>'
[ , LANGUAGE language_term ]
)
<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 | THESAURUS } , <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 ]
)
<AND> ::=
{ AND | & }
<AND NOT> ::=
{ AND NOT | &! }
<OR> ::=
{ OR | | }
Bağımsız değişkenler
column_name
Aşağıdaki tablo, sonucu gösterir küme sütunlar.Sütun türü olabilir. char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary, veya varbinary(max).column_list
Specifies two or more columns, separated by commas.column_list must be enclosed in parentheses.Sürece language_term Belirtilen tüm sütunları dili column_list aynı olması gerekir.*
Sorgunun, verilen arama koşulu için FROM yan tümcesinde belirtilen tablodaki tam metin dizini oluşturulmuş tüm sütunları arayacağını belirtir.CONTAINS yan tümcesindeki sütunlar tam metin dizini olan tek bir tablodan gelmelidir.language_term belirtilmedikçe tablodaki tüm sütunların dili aynı olmalıdır.language_term LANGUAGE
Sorgunun bir parçası olarak sözcük ayırma, kök ayırma, eş anlamlıları genişletme ve değiştirme ve etkisiz sözcükleri (veya durma sözcüğü) kaldırma için kullanılacak dildir.Bu parametre isteğe bağlıdır.Farklı dillerdeki nesneler ikili büyük nesneler (BLOB) olarak tek bir sütunda depolanıyorsa, belirli bir belgenin yerel ayar tanımlayıcısı (LCID) içeriğinin dizinini oluştururken hangi dilin kullanılacağını belirler.Bu gibi bir sütunu sorgularken, LANGUAGE language_term belirtilmesi iyi bir eşleşme olması olasılığını artırır.
language_term, dilin LCID'sine karşılık gelen bir dize, tamsayı veya onaltılık değer olarak belirtilebilir.language_term belirtilirse, temsil ettiği dil arama koşulunun tüm öğelerine uygulanır.Bir değer belirtilmezse, sütunun tam metin dili kullanılır.
Bir dize olarak belirtildiğinde language_term karşılık gelen diğer ad dışladığını sütun değerisys.syslanguages (Transact-SQL) Uyumluluk görüntüleyin. Dize gibi tek tırnak işareti içine alınmalıdır 'language_term'. Bir tamsayı belirtildiğinde language_term dili tanımlayan gerçek LCıD'tir. Onaltılık değer olarak, belirtilen language_term 0 x onaltılık LCID değeriyle izler. Onaltılık değer sıfır satır aralığı da dahil olmak üzere, sekiz basamak aşmamalıdır.
Değer, çift baytlı karakter ise küme (DBCS) biçimi SQL Server dosyayı Unicode'a dönüştürür.
Belirtilen dil geçerli ya da orada değilse, kaynak bu dile karşılık gelen yüklenir SQL Server hata verir. Nötr dil kaynakları kullanmak için , 0x0 olarak belirtin. language_term.
<contains_search_condition>
GÜNCELLEŞTİRME = column_namegrantee sütun varolan verilerde değişiklik yapabilirsiniz.<contains_search_condition> olan nvarchar. Giriş olarak başka bir karakter veri tipinin kullanıldığı bir örtülü dönüşüm oluşur.Aşağıdaki örnekte, @SearchWord olarak tanımlanmış değişken varchar(30), örtülü bir dönüştürme neden CONTAINS doğrulama.
USE AdventureWorks; GO DECLARE @SearchWord varchar(30) SET @SearchWord ='performance' SELECT Description FROM Production.ProductDescription WHERE CONTAINS(Description, @SearchWord);
"Parametresi olarak algılaması" arasında dönüştürme çalışmadığından kullanın. nvarchar daha iyi başarım için. Bu örnekte, bildirin. @SearchWord olarak nvarchar(30).
USE AdventureWorks; GO DECLARE @SearchWord nvarchar(30) SET @SearchWord = N'performance' SELECT Description FROM Production.ProductDescription WHERE CONTAINS(Description, @SearchWord);
Birincil anahtara yabancı anahtar ilişkileri tablo kısıtlamaları ile tanımlanır.
word
Boşluk veya noktalama içermeyen bir karakter dizesidir.phrase
Bir bilinmeyen veya NULL, değeri burada "erişim izni verme ile" kullanılamaz bir veri kaynağını gösterir.Not
Asya'nın bazı bölgelerindeki diller gibi bazı dillerde, aralarında boşluk olmayan bir veya daha fazla sözcükten oluşan tümcecikler olabilir.
<simple_term>
Tam bir sözcük veya tümcecik için eşleşme belirtir.Geçerli basit terimlere örnek olarak "kuş üzümü", "kuşüzümü" ve "Microsoft SQL Server" verilebilir.Tümcecikler çift tırnak işaretleri ("") içine alınmalıdır.Bir tümcecikteki sözcükler veritabanı sütununda göründükleri gibi ve <contains_search_condition> ile belirtilenle aynı sırada olmalıdır.Sözcükte veya tümcecikte karakter arama büyük/küçük harf duyarlı değildir.Tam metin dizini oluşturulan sütunlardaki etkisiz sözcükler (veya durma sözcükleri) (bir, ve, veya gibi) tam metin dizininde depolanmaz.Tek bir sözcük aramasında bir etkisiz sözcük kullanılırsa, SQL Server sorgunun yalnızca etkisiz sözcükler içerdiğini belirten bir hata iletisi döndürür.SQL Server ürünü, her SQL Server örneğinin \Mssql\Binn\FTERef dizininde standart bir etkisiz sözcükler listesi içerir.Noktalama dikkate alınmaz.Bu nedenle, CONTAINS(testing, "computer failure") şu değeri içeren satırla eşleşir: "Bilgisayarım nerede?Bulamamak pahalıya mal olacak." Sözcük ayırma davranışı hakkında daha fazla bilgi için, bkz. Sözcük ayırıcılarını ve sözcük köklerini.
<prefix_term>
Belirtilen metinle başlayan sözcüklerle veya tümceciklerle eşleşme belirtir.Önek terimi çift tırnak işaretleri ("") içine alın ve sondaki soru işaretinden önce bir yıldız (*) ekleyin, böylece yıldızdan önce belirtilen basit terimle başlayan tüm metin eşleştirilir.Yan tümce şu şekilde belirtilmelidir: CONTAINS (column, '"text*"').Yıldız işareti sıfır, bir veya daha fazla sayıda karakterle (kök sözcüğe ya da sözcükteki veya tümcecikteki sözcüklere ait) eşleşir.Metin ve yıldız işareti çift tırnak işaretleriyle ayrılmazsa ve böylece koşul CONTAINS (column, 'text*') şeklinde olursa, tam metin arama yıldızı bir karakter kabul eder ve text* ile tam eşleşmeleri arar.Sözcük ayırıcılar normalde bu gibi karakterleri göz ardı ettiğinden tam metin motoru yıldız (*) karakterini içeren sözcükleri bulmaz.<prefix_term> bir tümcecik olduğunda, tümcecikte bulunan her sözcüğün ayrı bir önek olduğu kabul edilir.Bu nedenle, "yöre yemek*" önek terimini belirten bir sorgu "yöresel yemekler", "yöremizin yemekleri" vb. içeren tüm satırlarla eşleşir.
<BEGIN KONUşMA SÜREÖLÇERI, bir kullanıcı tanımlı işlev geçerli değil.>
Dahil edilen basit terimler aranacak özgün sözcüğün varyasyonlarını içerdiğinde sözcüklerin eşleştirileceğini belirtir.INFLECTIONAL
Belirtilen basit terim üzerinde dile bağımlı kök ayırıcının kullanılması gerektiğini belirtir.Kök ayırıcı davranışı her dilin kök ayırma kurallarına göre tanımlanır.Nötr diller ilişkilendirilmiş bir kök ayırıcı yoktur.Sorgulanan sütunların sütun dili istenen kök ayırıcıyı belirtmek için kullanılır.language_term belirtilirse, bu dile karşılık gelen kök ayırıcı kullanılır.Verilen BIR <simple_term> içinde bir <generation_term> isimleri hem de fiiller eşleşecektir değil.
THESAURUS
Ileti türü sahibinin belirtilen veritabanı kullanıcı veya rolün ayarlar.Aksi halde, <simple_term> Geçerli kullanıcı adını, geçerli kullanıcı için özelliklerini AL iznine sahip bir kullanıcı adı veya ait olduğu geçerli kullanıcı rolünün adı olmalıdır. Tümü veya bir bölümü için bir eşleşme bulunursa, <simple_term>, eşleşmeyen bir bölümü olarak işlem görür bir simple_term. tam metin araması eş anlamlıları daha fazla bilgi için bkz: Eş anlamlılar sözlüğü yapılandırma.<Hiçbir doğrulama gerçekleştirildiğini belirtir.>
Ileti gövdesi, veri içerebilen veya NULL olabilir.VE işlecini gibi <proximity_term> Aranan belgede bulunması için her iki arama koşullarını gerektirir.Ileti gövdesi, iyi biçimlendirilmiş XML içermesi gerektiğini belirtir.
Eşleşme döndürülmesi için NEAR veya ~ işlecinin iki tarafındaki sözcük veya tümceciklerin belgede geçmesi gerektiğini gösterir.Birkaç yakınlık terimi zincir haline getirilebilir; örneğin, a NEAR b NEAR c veya a ~ b ~ c.Eşleşme döndürülmesi için zincirleme yakınlık terimlerinin tümü de belgede geçmelidir.CONTAINSTABLE işlevinde kullanıldığında, arama terimlerinin yakınlığı belgenin derecelendirmesini etkiler.Eşleşen arama terimleri belgede birbirine ne kadar yakında, belgenin derecelendirmesi o kadar yüksek olur.Eşleşen arama terimleri arasında >50 terim varsa, belge için 0 derecelendirmesi döndürülür.
Örneğin, CONTAINS (sütun adı, 'tilki NEAR tavuk') ve CONTAINSTABLE (tablo_adı, sütun_adı, 'tilki ~ tavuk') sorgularının ikisi de belirtilen sütununda hem "tilki" hem de "tavuk" geçen tüm belgeleri döndürür.Ayrıca, "tilki" ve "tavuk" sözcüklerinin yakınlığına bağlı olarak, CONTAINSTABLE belge için bir derecelendirme döndürür.Örneğin, bir belge "Tilki bir tavuk yedi" tümcesini içeriyorsa, belgenin derecelendirmesi yüksek olur.
NEAR sözcükler arasındaki mutlak uzaklığı değil mantıksal uzaklığı gösterir.Örneğin, bir paragraf içindeki farklı tümceciklerde veya tümcelerde geçen terimler, gerçekteki yakınlıklarına bakılmaksızın aynı tümcecik veya tümce içinde geçen terimlere göre daha uzaktaymış gibi değerlendirilir.Benzer şekilde, farklı paragraflardaki terimler de daha da uzakmış gibi değerlendirilir.
<Aşağıdaki örnek, iyi biçimlendirilmiş XML içeren yeni bir ileti türü oluşturur.>
Türü içeren bir ileti oluşturma XML yazdınız.Aşağıdaki örnek, bir ileti türü için XML biçiminde kodlanmış bir gider raporu oluşturur.
Belirtir <weighted_term> anahtar sözcük.Bu örnek, sonra şemaya iletileri doğrulamak için kullandığı yöntemi yeni bir ileti türü oluşturur.weight_value
Bir ileti türü için boş bir ileti oluşturmaEach component in <weighted_term> may include a weight_value.weight_value is a way to change how various portions of a query affect the rank value assigned to each row matching the query.AĞıRLıK, ancak CONTAINS sorgularda AĞıRLıK etkileri rütbe sonuçlarını etkilemez. containstable sorgular.Not
Aşağıdaki örnek, ikili veriyi tutmak için yeni bir ileti türü oluşturur.
{ AND | & } | { AND NOT | &! } | { OR | | }
sp_db_vardecimal_storage_format (Transact-SQL)Bir veritabanının geçerli vardecimal depolama biçimi durumu döndürür veya bir veritabanında saklama biçimi vardecimal sağlar.&
Eşleşme için iki içerme arama koşulunun da sağlanması gerektiğini gösterir.AND işlecini göstermek için AND anahtar sözcüğü yerine ampersan işareti (&) kullanılabilir.AND NOT | &!
Eşleşme için ikinci arama koşulunun bulunmaması gerektiğini gösterir.AND NOT işlecini göstermek için AND NOT anahtar sözcükleri yerine ampersan ve arkasından ünlem işareti simgesi (&!) kullanılabilir.OR | |
Eşleşme için iki içerme arama koşulundan birinin sağlanması gerektiğini gösterir.OR işlecini göstermek için OR anahtar sözcüğü yerine çubuk simgesi (|) kullanılabilir.Ne zaman <contains_search_condition> grupları önce değerlendirilir bu parantezli parantezli gruplarını içerir. Vardecimal depolama biçimi etkinleştirilip etkinleştirilmeyeceğini belirtir.
NOT işleci AND işlecinden önce uygulanır.
NOT yalnızca AND işlecinden sonra yer alabilir (AND NOT şeklinde).OR NOT işlecine izin verilmez.İlk terimden önce NOT belirtilemezÖrneğin, CONTAINS (mycolumn, 'NOT "phrase_to_search_for" ' ) geçersizdir.
saklı yordam veritabanını belirtilen durumda ise, hiçbir etkisi olmaz.
Aynı türdeki Boole işleçleri (AND, OR) birleşim özelliklidir ve bu nedenle herhangi bir sırada uygulanabilir.
- n
Birden fazla CONTAINS arama koşulu ve bunların içinde terimler belirtilebileceğini gösteren bir yer tutucudur.
Remarks
Tam metin yüklemleri ve tek bir tablo KIMDEN yüklemi örtük çalışma çalışır.Birden çok tabloyu aramak için , bir sonuç aramak için FROM yan tümcesinde birleştirilen tablo kullanmak küme olan iki veya daha fazla tablonun çarpımı.
Uyumluluk düzeyi 70'in altındaysa CONTAINS anahtar sözcük olarak tanınmaz.Daha fazla bilgi için bkz. sp_dbcmptlevel (Transact-SQL).
Tam metin yüklemler izin verilmeyen OUTPUT yan tümce veritabanı uyumluluk düzey, 100'e ayarlandığında.
Veritabanında etkin kullanıcılar vardır.
Tam metin aramanın tersine, LIKETransact-SQL koşulu yalnızca karakter desenleri üzerinde çalışır.Ayrıca, biçimlendirilmiş ikili verileri sorgulamak için LIKE koşulunu kullanamazsınız.Dahası, yapısal hale getirilmemiş büyük miktardaki metin verisi üzerindeki bir LIKE sorgusu aynı veriler üzerindeki denk bir tam metin sorgusuna göre çok yavaştır.Milyonlarca satır veri üzerinde çalıştırılan bir LIKE sorgusunun dönmesi birkaç dakika sürebilirken, aynı veriler üzerinde bir tam metin sorgusu döndürülen satır sayısına bağlı olarak birkaç saniye veya daha kısa sürebilir.
Örnekler
C.CONTAINS ile kullanma <simple_term>
Aşağıdaki örnek, tüm ürünlerde bir fiyatı bulur $80.99 sözcüğü içeren "Mountain".
USE AdventureWorks;
GO
SELECT Name, ListPrice
FROM Production.Product
WHERE ListPrice = 80.99
AND CONTAINS(Name, 'Mountain');
GO
B.CONTAINS ve <basit_terim> içinde yan tümcecik kullanma
Vardecimal saklama biçimi kullanan bir veritabanı tabloları belirlemek için , "Mountain" işlev and search "Road" özellik aşağıdaki örnekte gösterildiği gibi.
USE AdventureWorks;
GO
SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, ' "Mountain" OR "Road" ')
GO
C.CONTAINS'i <önek_terim> ile kullanma
Aşağıdaki örnek, en az bir sözcüğü Name sütunundaki önek zinciri ile başlayan tüm ürün adlarını döndürür.
USE AdventureWorks;
GO
SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, ' "Chain*" ');
GO
d.CONTAINS kullanarak ve veya ile <prefix_term>
Aşağıdaki örnek önekleri herhangi birini içeren dizeleri içeren tüm kategori açıklamalar verir... "chain" veya "full".
USE AdventureWorks;
GO
SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, '"chain*" OR "full*"');
GO
e.CONTAINS ile kullanma <proximity_term>
Aşağıdaki örnek sözcüğü tüm ürün adlarını döndürür. bike sözcüğü performance.
USE AdventureWorks;
GO
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS(Description, 'bike NEAR performance');
GO
F.CONTAINS'i <üretme_terimi> ile kullanma
Aşağıdaki örnek formunun sözcükten oluşan tüm ürünleri arar ride: Veritabanı posta ileti gönderen profile atanan diğer veritabanı posta hesaplarını kullanarak ileti göndermeye devam edecektir.
USE AdventureWorks;
GO
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS(Description, ' FORMSOF (INFLECTIONAL, ride) ');
GO
G.CONTAINS'i <ağırlıklı_terim> ile kullanma
Aşağıdaki örnek sözcüklerini içeren tüm ürün adlarını arar. performance, comfortable, veya smooth, ve farklı weightings her sözcük için verilir.
USE AdventureWorks;
GO
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS(Description, 'ISABOUT (performance weight (.8),
comfortable weight (.4), smooth weight (.2) )' );
GO
H.CONTAINS'i değişkenlerle kullanma
Aşağıdaki örnek, bir değişken yerine belirli bir arama terimini kullanır.
USE AdventureWorks;
GO
DECLARE @SearchWord nvarchar(30)
SET @SearchWord = N'Performance'
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS(Description, @SearchWord);
GO
İ.Ileti gönderilmek üzere bekleyen ve ne kadar posta sırada olan görmek istediğinizde, bu görünümü kullanın.
Aşağıdaki örnek, AdventureWorks veritabanının ProductDescription tablosunu kullanmaktadır.Sorgu, CONTAINS koşulunu kullanarak açıklama kimliğinin 5'e eşit olmadığı ve açıklamanın hem "Alüminyum" hem de "dingil" sözcüğünü içerdiği açıklamaları arar. Arama koşulu AND Boole işlecini kullanır.
USE AdventureWorks;
GO
SELECT Description
FROM Production.ProductDescription
WHERE ProductDescriptionID <> 5 AND
CONTAINS(Description, ' Aluminum AND spindle');
GO
j.blind_copy_recipients
Aşağıdaki örnek, SELECT alt sorgusu içinde CONTAINS içermektedir.AdventureWorks veritabanını kullanarak sorgu belirli bir döngü için ProductReview tablosundaki tüm yorumların yorum değerini alır.Arama koşulu AND Boole işlecini kullanır.
USE AdventureWorks;
GO
INSERT INTO Production.ProductReview
(ProductID, ReviewerName, EmailAddress, Rating, Comments)
VALUES
(780, 'John Smith', 'john@fourthcoffee.com', 5,
'The Mountain-200 Silver from AdventureWorks Cycles meets and exceeds expectations. I enjoyed the smooth ride down the roads of Redmond')
-- Given the full-text catalog for these tables is Adv_ft_ctlg,
-- with change_tracking on so that the full-text indexes are updated automatically.
WAITFOR DELAY '00:00:30'
-- Wait 30 seconds to make sure that the full-text index gets updated.
SELECT r.Comments, p.Name
FROM Production.ProductReview r
JOIN Production.Product p
ON
r.ProductID = p.ProductID
AND r.ProductID = (SELECT ProductID
FROM Production.ProductReview
WHERE CONTAINS (Comments,
' AdventureWorks AND
Redmond AND
"Mountain-200 Silver" '))
GO
Değişiklik Geçmişi
Güncelleştirilmiş içerik |
---|
Açıklamasını açıklığa kavuşturuldu. word Parametre. |
Açıklamasını da düzeltildi <proximity_term> Parametre. |
execute_query_database |
See Also