2010-05-21 10 views
7

एमएस एसक्यूएल 'युक्त' फ़ंक्शन के अंदर आप दोहरे उद्धरण चरित्र से कैसे बचते हैं?एसक्यूएल फुलटेक्स्ट 'युक्त' फ़ंक्शन के अंदर आप डबल कोट्स से कैसे बचते हैं?

SELECT decision 
FROM table 
WHERE CONTAINS(decision, '34" AND wide') 

आम तौर पर होता है() को उम्मीद है दोहरे उद्धरण चिह्नों सटीक वाक्यांश से मिलान करने के लिए चारों ओर है, लेकिन मैं एक वास्तविक दोहरे उद्धरण चरित्र को खोजना चाहते हैं। मैंने इसे \ "`, और यहां तक ​​कि एक और डबल कोट के साथ भागने का प्रयास किया है, लेकिन इनमें से कोई भी काम नहीं कर पाया है।

पीएस मुझे एक साधारण उदाहरण का एहसास है जैसे कि यह LIKE कथन का उपयोग करके भी किया जा सकता है, लेकिन मुझे पूर्ण टेक्स्ट खोज फ़ंक्शन का उपयोग करने की आवश्यकता है। यहां प्रदान की गई क्वेरी को उदाहरण के उद्देश्यों के लिए मेरी वास्तविक क्वेरी से सरलीकृत किया गया है।

+0

संबंधित प्रश्न जो ओपी पहले से ही देख चुका है: http://stackoverflow.com/questions/387198/escape-double-quotes-in-sql-2005-2008 – bernie

उत्तर

5

documentation से:

विराम चिह्न नजरअंदाज कर दिया है। इसलिए, CONTAINS(testing, "computer failure") मूल्य के साथ एक पंक्ति से मेल खाता है, "मेरा कंप्यूटर कहां है? इसे खोजने में विफलता महंगी होगी।"

FULLTEXT के बाद से नहीं है यहां तक ​​कि सूचकांक विराम चिह्न, आप LIKE उपयोग करके अपने परिणामों को फ़ाइन-फिल्टर करने के लिए की आवश्यकता होगी:

SELECT decision 
FROM table 
WHERE CONTAINS(decision, '34 AND wide') 
     AND decision LIKE '%34"%' 

यह प्रतिलिपि प्राप्त करने के लाभों को सुरक्षित करेगा।

2

उपरोक्त उत्तर SQL सर्वर 2008 में काम नहीं करता है यदि आपकी स्ट्रिंग एक अंक संख्या के लिए है।

यह काम करता है:

SELECT partdescription 
FROM table 
WHERE CONTAINS(partdescription, '10') 
     AND decision LIKE '%10"%' 

यह काम नहीं करता:

SELECT partdescription 
FROM table 
WHERE CONTAINS(partdescription, '6') 
     AND decision LIKE '%6"%'' 

संपादित करें: क्यों एक एकल अंक सूचीबद्ध नहीं की जाएगी की व्याख्या।

यदि सिस्टम स्टॉप शब्द (या शोर शब्द) सूची का उपयोग किया जा रहा है, तो इसमें प्रत्येक संख्यात्मक अंक शामिल हैं जिन्हें शब्दों को अनदेखा किया जाना चाहिए। आप स्टॉप वर्ड सूची की सामग्री बदल सकते हैं या आप स्टॉप वर्ड्स को पूरी तरह से बंद कर सकते हैं।

ALTER FULLTEXT INDEX ON dbo.my_ft_table SET STOPLIST = OFF; 

इन परिवर्तनों में से एक बना है, पाठ प्रभावित पहले एकल अंक खोजने योग्य बन reindexed किया जाना चाहिए। Reindexing के बाद यह वास्तव में '6' खोजना संभव होगा।

+0

मैंने यह दिखाने के लिए स्पष्टीकरण अपडेट किया कि एक अंक क्यों होगा या करेगा अनुक्रमित नहीं किया गया है। – RLF

संबंधित मुद्दे