2008-11-26 9 views
10

Tam metinli bir SQL Server sorgusunda bir parantezden nasıl çıkabilirim?Kaçırma Braketi [bir CONTAINS() cümlede mi?

CONTAINS(crev.RawText, 'arg[0]') 
CONTAINS(crev.RawText, 'arg[[0]]') 
CONTAINS(crev.RawText, 'arg\[0\]') 

çift tırnak kullanımı çalışır, ancak birden kelimelik sorgular için bir showstopper bir ifade olmak için tüm arama zorlar: Ben hiçbiri işin, tüm aşağıdakileri denedim.

CONTAINS(crev.RawText, '"arg[0]"') 

gerçekten yapmak istediğim braket kaçmak, ama bunu yapmak için görünmüyor olabilir ..

cevap

8

Tam Metin Araması'nda özel bir anlamı olmadığı için [sizden kaçmak zorunda değilsiniz. Tam bir eşleşme olsa da, "" işaretlerini kullanabilirsiniz.

Ayrıca, sen tek tırnak içinde "" birden kullanabilirsiniz:

CONTAINS('"word1" or "word2" or "word3"') 

Bu aynı zamanda çalışır: çift tırnak içine koymak

CONTAINS('"word1" and "word2" and "word3"') 

şey tam metin olarak kabul edilir. Böylece, Üretim'in Tanım alanının bir araştırmasını yapmaktaydım.AdventureWorks içinde ProductDescription tablo, ben

CONTAINS('shifting and "on or off-road"') 

kullanabilir ve aynı zamanda "veya off-road" ifadesini vardı kelimesi kayması için eşleşmeleri bulur.

Sadece özel sembol ~, NEAR komutunun yerine kullanılabilir.

CONTAINS('shifting ~ smooth') 

CONTAINS('shifting NEAR smooth') 

aynıdır ve değişen ve pürüzsüz kelimeler birbirine yakın eşleşmeleri bulacaksınız.

+0

yakınında sözdizimi hatası bu doğrudur, ancak parantezden kurtulmak zorundasınız (ya da gösterdiğiniz gibi birden fazla VEYA VEYA ayrılmış alıntıya yerleştirmeniz gerekir) - tırnak işareti dışındaki tırnakların bir hata oluşturması. –

+0

sadece% 100 net olmak için, bu çalışır: 'CONTAINS (alan, 'value AND' değeri [0] '')' dır, ancak bu şunları yapmaz: 'CONTAINS (alan, 'value' değeri [0]" ') ' . Botanik tümceleri –

+0

SELECT * FROM dbo.stackoverflow_319730 DAHA İYİ KONTEYVLER (txtcol, '"arg [0]" VE "arg [1]"'), test verilerimde kendi başına arg [0] ile eşleşmelidir. . –

2

değil görünüşte tam dizin oluşturma ruhu içinde.

kelime

boşluk veya noktalama işaretleri olmadan karakterlerin bir dize var.

ifade her kelime arasında boşluk olan bir ya da daha çok sözcük mi.

Ve

Noktalama göz ardı edilir. Bu nedenle, CONTAINS (sınama, "bilgisayar hatası") , " bilgisayarım nerede? Değeri bulunamıyor."

Seçeneklerin ne olduğundan emin değilim.

Açıkçası LIKE çalışıyor: problem ima sonuçlarla

CREATE TABLE [dbo].[stackoverflow_319730](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [txtcol] [text] NOT NULL, 
CONSTRAINT [PK_stackoverflow_319730] PRIMARY KEY CLUSTERED 
(
    [id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 

INSERT INTO [dbo].[stackoverflow_319730] (txtcol) VALUES ('arg[0]') 
INSERT INTO [dbo].[stackoverflow_319730] (txtcol) VALUES ('arg[1]') 
INSERT INTO [dbo].[stackoverflow_319730] (txtcol) VALUES ('some other text') 
INSERT INTO [dbo].[stackoverflow_319730] (txtcol) VALUES ('arg[0], arg[1]') 

EXEC sp_fulltext_catalog 'FTCatalog','create' 
EXEC sp_fulltext_table  'stackoverflow_319730', 'create', 'FTCatalog', 'pk_stackoverflow_319730' 
EXEC sp_fulltext_column 'stackoverflow_319730', 'txtcol', 'add' 
EXEC sp_fulltext_table  'stackoverflow_319730','activate' 
EXEC sp_fulltext_catalog 'FTCatalog', 'start_full' 

SELECT * 
FROM dbo.stackoverflow_319730 
WHERE txtcol LIKE 'arg[ [ ]0]' 

SELECT * 
FROM dbo.stackoverflow_319730 
WHERE CONTAINS(txtcol, '"arg[0]"') 

:

SELECT * 
FROM dbo.stackoverflow_319730 
WHERE txtcol LIKE 'arg[ [ ]0]' 

Ama

SELECT * 
FROM dbo.stackoverflow_319730 
WHERE CONTAINS(txtcol, '"arg[0]"') 

Hatta örneğin, içinde 'arg[1]' bir sütun eşleşir noktalama işareti ile:

id   txtcol 
----------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
1   arg[0] 

(1 row(s) affected) 

id   txtcol 
----------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
1   arg[0] 
2   arg[1] 
4   arg[0], arg[1] 
Informational: The full-text search condition contained noise word(s). 
+0

Sözdizimi hatası '[' tam metin arama koşulunda 'arg [[] 0]' konumunda. –

+0

bu ifadede []] arasında boşluk var, tüm boşluklar kaldırıldığında ne olur? –

+0

'[' Tam metin arama koşulunda 'arg [[] 0]' –

İlgili konular