जाँच करें कि क्या किसी स्ट्रिंग में संग्रहीत कार्यविधि का उपयोग करते हुए SQL Server 2005 में एक स्ट्रिंग है


245

मैं एक स्ट्रिंग है, @mainString = 'CATCH ME IF YOU CAN'। मैं जांचना चाहता हूं कि क्या शब्द MEअंदर है @mainString

अगर स्ट्रिंग में एसक्यूएल में एक विशिष्ट सबस्ट्रिंग है तो मैं कैसे जांचूं?

जवाबों:


395

CHARINDEX () एक बड़े स्ट्रिंग के विकल्प में खोजता है, और यदि कोई मैच नहीं मिला है, या मैच की स्थिति लौटाता है, या 0

if CHARINDEX('ME',@mainString) > 0
begin
    --do something
end

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

CHARINDEX(' ME ',' ' + REPLACE(REPLACE(@mainString,',',' '),'.',' ') + ' ')

(किसी भी अन्य विराम चिह्न के लिए अधिक पुनरावर्ती उत्तर () कॉल जोड़ें) हो सकता है


2
ओकी मैंने PATINDEX का इस्तेमाल किया। धन्यवाद!
एनएलवी

1
s / पुनरावर्ती / नेस्टेड / - "पुनरावर्ती" होगा यदि REPLACEस्वयं कहा जाता है; "नेस्टेड" तब होता है जब एक फ़ंक्शन कॉल का परिणाम तुरंत दूसरे फ़ंक्शन को दिया जाता है।
निधि मोनिका का मुकदमा

2
क्या SQL में 'ME' केस सेंसिटिव होगा या आपको 'Me' और 'me' के लिए भी स्टेटमेंट देना होगा?
a.powell

5
@ a.powell - कोलाज के शामिल होने पर निर्भर करता है। आप हमेशा इसे इस परीक्षण के भीतर मजबूर कर सकते हैं यदि आपको इसे एक तरह से या दूसरे की आवश्यकता है। जैसे तुलना select CHARINDEX('ME' collate Latin1_General_CS_AS,'Home')और select CHARINDEX('ME' collate Latin1_General_CI_AS,'Home')। (टकराव में, CSकेस सेंसिटिव के लिए खड़ा है और मुझे यकीन है कि आप बाहर काम कर सकते हैं CI)।
डेमियन___बेलिवर्स

2
@VincePanuccio - टी-एसक्यूएल का स्ट्रिंग प्रसंस्करण बेहद कमजोर है। SQL की ताकत सेट-आधारित संचालन में है। इस मामले में (स्ट्रिंग प्रसंस्करण करना चाहते हैं, और ऐसा कुछ जहां एक रेगीक्स एक स्पष्ट समाधान होगा), यह उनके लिए नौकरी के लिए गलत उपकरण चुनने का मामला है।
डेमियन_इन_अनबेलेवर

120

आप वाइल्डकार्ड का उपयोग विधेय में (IF, WHERE या ON के बाद) कर सकते हैं:

@mainstring LIKE '%' + @substring + '%'

या इस विशिष्ट मामले में

' ' + @mainstring + ' ' LIKE '% ME[., ]%'

(यदि आप पूरे शब्द की तलाश कर रहे हैं, तो उद्धरण में रिक्त स्थान डालें या यदि ME मुझे किसी बड़े शब्द का हिस्सा हो सकता है तो छोड़ दें)।


3
यदि आप शब्द मिलान (आपका दूसरा उदाहरण) देख रहे हैं, तो आपको @mainString से पहले और बाद में एक स्थान जोड़ना होगा (इसलिए आप पहले या अंतिम शब्द का मिलान कर सकते हैं), और b) विराम चिह्न हटाएं
Damien_The_Unbeliever

2
यह मेरे लिए CHARINDEX () से बेहतर है क्योंकि मेरे विशेष मामले में, मैं सीमित अनुमतियों के कारण CHARINDEX () फ़ंक्शन को निष्पादित नहीं कर सकता।
जेम्स टी स्नेल

1
(बस अपने सभी स्ट्रिंग स्थिरांक के साथ उपसर्ग करना न भूलें N यदि आपका कॉलम ए है nvarchar, तो आप अपने , अन्यथा आप प्रति पंक्ति रूपांतरण प्राप्त कर सकते हैं)
रिचर्ड सजेले
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.