2011-10-07 16 views
8

मैं एक टेबल पर दो प्रश्न चला रहा हूं।एसक्यूएल: बनाम बनाम युक्त - विभिन्न परिणाम

SELECT MSDS FROM dbo.MSDSSearch3 WHERE CONTAINS(MSDS, 'STYCAST') 

और

SELECT MSDS FROM dbo.MSDSSearch3 WHERE MSDS like '%STYCAST%' 

पहली क्वेरी वापस आ जाएगी

'STYCAST 50300 LV' 

और दूसरा

'STYCAST 50300 LV' 
'STYCAST 2851 BLACK' 

वापस आ जाएगी किसी को भी क्यों की तरह अधिक से अधिक मान हैं पता है इसमें शामिल है? क्या मुझे कोई समस्या है जिसमें मैं दौड़ रहा हूं? अग्रिम में धन्यवाद।

+0

एसक्यूएल सर्वर के किन संस्करणों? यदि 2008 में आप 'चयन * से sys.dm_fts_parser (' "स्टाइकास्ट 2851 ब्लैक" ', 1033, 0,0) के साथ पार्सर में कुछ दृश्यता प्राप्त कर सकते हैं,' मुझे कोई कारण नहीं दिख रहा है कि स्ट्रिंग का अलग-अलग व्यवहार क्यों किया जाएगा। –

+3

दिलचस्प सवाल, क्या आप वाकई सुनिश्चित हैं कि दोनों मान बिल्कुल समान हैं? जैसा कि किसी भी अग्रणी/पीछे वाले व्हाइटस्पेस वर्णों में नहीं है। इससे इस समस्या का कारण बन सकता है क्योंकि कंटेनर आपके टेक्स्ट से मेल खाते हैं जबकि LIKE आपके टेक्स्ट से मेल खाएगा + इसके किसी भी तरफ – Purplegoldfish

+11

ऐसी स्थिति की तरह लगता है जहां आपकी फुलटेक्स्ट कैटलॉग पुरानी है। आप इसे [वैकल्पिक पूर्ण कैटलॉग] (http://msdn.microsoft.com/en-us/library/ms176095.aspx) के साथ पुनर्निर्माण करने का प्रयास करना चाहेंगे। –

उत्तर

2

कंटेन एक पूरी तरह से अलग कार्य है, यह पूर्ण-पाठ कॉलम के लिए एक अनुमानित क्वेरी है; यह निर्धारित करने के लिए एक फ़ंक्शन नहीं है कि कॉलम में एक स्ट्रिंग है या नहीं।

प्रश्न के लिए आप चल रहे हैं, तो आप इस इस्तेमाल कर सकते हैं:

SELECT MSDS FROM dbo.MSDSSearch3 WHERE CONTAINS(MSDS, '"STYCAST*"') 

वहाँ आप एक उपसर्ग खोज है बजाय एक simple_term खोज की तरह आप वर्तमान में है।

अधिक विवरण: http://msdn.microsoft.com/en-us/library/ms187787.aspx


हो सकता है कि रास्ते में

आप इसे पाठ 'STYCAST 2851 BLACK' परिणाम में गिर नहीं है का उपयोग कर रहे हैं क्योंकि यह तुलना में 'STYCAST 50300 LV' एक और चरित्र है, तो यह [17 में से 7 मैच] बनाम [16 में से 7 मैच] बनाम है। मुझे यकीन नहीं है लेकिन यह इस अजीब व्यवहार को समझा सकता है।

+0

एक ही परिणाम के साथ, इस समाधान का परीक्षण किया। डीबीओ.एमएमएसडीएसएस 3 से एमएसडीएस चुनें जहां शामिल है (एमएसडीएस, '' स्टाइकास्ट * "') फिर भी एक मान वापस कर दिया। – Corey

+0

इसे पढ़ने के लिए दुखद; फिर यह पुरानी सूची होनी चाहिए, लेकिन आपने कहा कि आप इसे पहले ही अपडेट कर चुके हैं। यह बड़ा अजीब है। – daniloquio

+0

यदि आप इसे चलाते हैं तो: dbo.MSDSSearch3 से एमएसडीएस चुनें जहां शामिल है (एमएसडीएस, 'स्टाइकास्ट 2851 काला')? – daniloquio

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