2009-01-13 13 views
157

मैं इस तरह से संग्रहीत प्रक्रिया के साथ आइटम फ़िल्टर करने की कोशिश कर रहा हूं। कॉलम एक वर्कर (15) है। जिन आइटमों को मैं फ़िल्टर करने का प्रयास कर रहा हूं, वे नाम में स्क्वायर ब्रैकेट हैं।मैं एक झुकाव खंड में स्क्वायर ब्रैकेट से कैसे बच सकता हूं?

उदाहरण के लिए: WC[R]S123456

यदि मैं LIKE 'WC[R]S123456' करता हूं तो यह कुछ भी वापस नहीं करेगा।

मुझे ESCAPE कीवर्ड LIKE के साथ कीवर्ड का उपयोग करने पर कुछ जानकारी मिली लेकिन मुझे समझ में नहीं आता कि नियमित स्ट्रिंग के रूप में स्क्वायर ब्रैकेट का इलाज करने के लिए इसका उपयोग कैसे किया जाए।

+0

आपका प्रश्न के लिए [जैसे-ऑपरेटर टैग] कम से कम '5' वोट है। क्या मैं कृपया अनुरोध कर सकता हूं कि आप [टैग: एसक्यूएल-जैसे] को [synonym] (http://stackoverflow.com/tags/like-operator/synonyms) के रूप में सुझाव दें? – Kermit

उत्तर

216
LIKE 'WC[[]R]S123456' 

या

LIKE 'WC\[R]S123456' ESCAPE '\' 

काम करना चाहिए।

+6

यदि आप कस्टम एस्केप कैरेक्टर (बैकस्लैश वास्तव में कस्टम है) का उपयोग करना चाहते हैं तो ESCAPE कीवर्ड आवश्यक है। –

+3

@RyanKohn: http://meta.stackexchange.com/q/153241 –

+1

सुधार के लिए धन्यवाद, @ रयान। – Shog9

17

यहाँ मैं वास्तव में क्या प्रयोग किया जाता है:

like 'WC![R]S123456' ESCAPE '!' 
8

ESCAPE कीवर्ड यदि आप जो सामान्य रूप से वाइल्ड कार्ड हैं% और _ जैसे विशेष वर्ण, के लिए खोज करने की जरूरत है प्रयोग किया जाता है। यदि आप ESCAPE निर्दिष्ट करते हैं, तो SQL अक्षरों% और _ के लिए सचमुच खोज करेगा।

Here's a good article with some more examples

SELECT columns FROM table WHERE 
    column LIKE '%[[]SQL Server Driver]%' 

-- or 

SELECT columns FROM table WHERE 
    column LIKE '%\[SQL Server Driver]%' ESCAPE '\' 
23

मैं ऐसे नाम हैं जो एक प्रश्न से एक अंडरस्कोर से शुरू कर दिया निकालने के लिए आवश्यक है, इसलिए मैं इस के साथ समाप्त हो गया:

WHERE b.[name] not like '\_%' escape '\' -- use \ as the escape character 
+1

मुझे इस संस्करण का उपयोग करना था (स्पष्ट रूप से "भागने" चरित्र को निर्दिष्ट करना) - अन्य उत्तरों ने मेरे लिए सही परिणाम नहीं दिए। – MarcE

71

मान लीजिए कि आप शाब्दिक its[brac]et मैच के लिए चाहते हैं।

आपको ] से बचने की आवश्यकता नहीं है क्योंकि इसका विशेष अर्थ केवल [ के साथ जोड़ा जाता है।

इसलिए समस्या को हल करने के लिए [ से बचने के लिए पर्याप्त है। आप [से[[] के साथ इसे स्थानांतरित कर सकते हैं।

+5

यह वास्तव में सहायक था और आईएमओ सबसे अच्छा जवाब था। –

+5

[[] बस अजीब है! लेकिन धन्यवाद! –

2

कीबोर्ड पर '\' या किसी अन्य चरित्र के बजाय, आप विशेष वर्णों का भी उपयोग कर सकते हैं जो कीबोर्ड पर नहीं हैं। आपके उपयोग के मामले के आधार पर यह आवश्यक हो सकता है, यदि आप नहीं चाहते हैं कि उपयोगकर्ता इनपुट को गलती से बचने वाले चरित्र के रूप में उपयोग किया जाए।

+1

मैं अक्सर '¬' का उपयोग करता हूं - यह अभी भी ब्रिटेन में एक कीबोर्ड चरित्र है लेकिन शायद ही कभी जानबूझ कर उपयोग किया जाता है :) (' Esc' और 'Tab' के बीच शीर्ष बाएं) –

1

आप '_' (अंडरस्कोर) जैसे विशेष वर्ण से बचने के लिए, के रूप में यह मेरे मामले में था की जरूरत है, और आप एक ESCAPE खंड को परिभाषित करने के लिए तैयार/सक्षम नहीं नहीं कर रहे हैं, तो आप विशेष संलग्न करने की इच्छा हो सकती है वर्ग ब्रैकेट '[' और ']' के साथ चरित्र।

यह "अजीब" स्ट्रिंग '[[]' के अर्थ बताते हैं - यह सिर्फ '[' वर्ग कोष्ठक के साथ चरित्र को गले लगाती है, प्रभावी रूप से यह भागने।

मेरा उपयोग केस प्रोफाइलर के लिए फ़िल्टर मानदंड के रूप में अंडरस्कोर के साथ संग्रहीत प्रक्रिया का नाम निर्दिष्ट करना था।इसलिए मैंने स्ट्रिंग '_% का नाम [_] एक [_] संग्रहीत [_] प्रक्रिया%' टेक्स्टडाटा LIKE फ़ील्ड में रखा है और यह मुझे ट्रेस परिणाम देता है जो मैं प्राप्त करना चाहता था।

यहाँ प्रलेखन से एक अच्छा उदाहरण है: LIKE (Transact-SQL) - Using Wildcard Characters As Literals

1

documentation के अनुसार:

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

आप इन तीन अक्षरों %_[ से बचने के लिए की जरूरत है: टैग:

'5%'  LIKE '5[%]'  -- true 
'5$'  LIKE '5[%]'  -- false 
'foo_bar' LIKE 'foo[_]bar' -- true 
'foo$bar' LIKE 'foo[_]bar' -- false 
'foo[bar' LIKE 'foo[[]bar' -- true 
'foo]bar' LIKE 'foo]bar' -- true 
संबंधित मुद्दे