SQL सर्वर में सबस्ट्रिंग बनाम बदलें बनाम सामग्री
उदाहरण
अपने डोमेन नाम का उपयोग करते हुए, हमने "https://" को तीन तरीकों से हटाने का एक उदाहरण प्रदान किया है।
हमने एक उदाहरण के रूप में कुछ परीक्षण एसक्यूएल प्रदान किए हैं और निम्नलिखित अंतर्निहित कार्यों का पता लगाएंगे;
- सबस्ट्रिंग
- बदलने के
- सामग्री
- बाएँ दांए
- चरिन्देक्स
- उल्टा
- ISNULL/NULLIF
SQL
DECLARE @e NVARCHAR(MAX)='https://www.claytabase.co.uk'SELECT SUBSTRING(@e,9,100)SELECT REPLACE(@e,'https://','')SELECT STUFF(@e,1,8,'')--www.claytabase.co.uk--www.claytabase.co.uk--www.claytabase.co.uk
सबस्ट्रिंग
किसी स्ट्रिंग के भाग को प्रदर्शित करने के लिए SUBSTRING का उपयोग करें। तो इस उदाहरण में हम चाहते हैं कि शुरुआती स्थिति 9 हो। लंबी लंबाई का उपयोग करें जब आप स्ट्रिंग के बाकी छोर को प्रदर्शित करना चाहते हैं।
सबस्ट्रिंग (अभिव्यक्ति, प्रारंभ, लंबाई)
बाएँ दांए
बदलने के
एक स्ट्रिंग के भीतर एक स्ट्रिंग की सभी घटनाओं को बदलने के लिए REPLACE का उपयोग करें। जब आप केवल एक ही घटना को बदलना चाहते हैं, तो STUFF का उपयोग करें।
REPLACE(string_expression, string_pattern, string_replacement)
सामग्री
टेक्स्ट स्ट्रिंग के हिस्से को दूसरे से बदलने के लिए STUFF का उपयोग करें जहां आप उन वर्णों की स्थिति जानते हैं जिन्हें आप बदलना चाहते हैं।
STUFF(character_expression, start, length, replace_expression)
स्थिति खोजने के लिए CHARINDEX फ़ंक्शन का उपयोग करें
यह अत्यधिक संभावना नहीं है कि आप उस स्ट्रिंग की स्थिति को जानेंगे जिसे आप हर समय बदलना चाहते हैं, इसलिए हम आमतौर पर स्थिति खोजने के लिए CHARINDEX फ़ंक्शन का उपयोग करते हैं।
नीचे हमने सबस्ट्रिंग और राइट के साथ एक ही स्ट्रिंग को अलग करने के लिए इसका इस्तेमाल किया है, लेकिन संयोजनों के संदर्भ में विकल्प बहुत अधिक असीमित हैं जिनका उपयोग किया जा सकता है।
CHARINDEX को प्रारंभिक स्थिति के रूप में उपयोग करते समय आपको सही प्रदर्शन आइटम प्राप्त करने के लिए मान से 1 जोड़ना या घटाना होगा।
SQL
DECLARE @e NVARCHAR(MAX)='https://www.claytabase.co.uk'SELECT CHARINDEX('.',@e,1),SUBSTRING(@e,CHARINDEX('.',@e,1)+1,100)SELECT CHARINDEX('.',@e,CHARINDEX('.',@e,1)+1),SUBSTRING(@e,CHARINDEX('.',@e,CHARINDEX('.',@e,1)+1)+1,100)SELECT CHARINDEX('.',REVERSE(@e),1),RIGHT(@e,CHARINDEX('.',REVERSE(@e),1)-1)--12,claytabase.co.uk--23,co.uk--3,uk
विफलताओं के आसपास काम करना
अन्य कार्यों के साथ 1 के जोड़ या घटाव का उपयोग करने से नकारात्मक मान पार्स किया जा सकता है, जिससे विफलता हो सकती है। उदाहरण में हमने -1 से NULL सेट करके इसके चारों ओर कोड किया है, जिसे बाद में परोक्ष रूप से 0 में बदल दिया जाएगा।
Workaround
DECLARE @e NVARCHAR(MAX)='https://www.claytabase.co.uk'SELECT CHARINDEX('x',REVERSE(@e),1),NULLIF(RIGHT(@e,CHARINDEX('x',REVERSE(@e),1)),-1)
विभिन्न स्ट्रिंग फ़ंक्शंस का संयोजन
ऊपर दिए गए विभिन्न कार्यों का उपयोग करते हुए, हमने नीचे एक URL स्ट्रिंग के विभिन्न भागों को निकाला है।
यदि वे मौजूद हैं तो ये प्रोटोकॉल, डोमेन, पेज और क्वेरी स्ट्रिंग्स को बाहर निकाल देंगे।
Complex SQL
DECLARE @e NVARCHAR(MAX)='https://www.claytabase.co.uk/Database-Consultancy-Services/Technical-Articles/SQL-Server-Data/Substring-vs-Replace-vs-Stuff?qrystr=claytabase'SELECT CHARINDEX('//',@e,1),LEFT(@e,CHARINDEX('//',@e,1)+1)--Protocol add 1 to pull through complete valueSELECT CHARINDEX('//',@e,1),CHARINDEX('/',@e,CHARINDEX('//',@e,1)+2),SUBSTRING(@e,CHARINDEX('//',@e,1)+2,CHARINDEX('/',@e,10)-LEN(LEFT(@e,CHARINDEX('//',@e,1)+2)))--CHARINDEX needs adjusting to remove protocol lengthSELECT CHARINDEX('/',@e,CHARINDEX('//',@e,1)+2),ISNULL(NULLIF(CHARINDEX('?',@e,1)-1,-1),LEN(@e)),SUBSTRING(@e,CHARINDEX('/',@e,CHARINDEX('//',@e,1)+2)+1,ISNULL(NULLIF(CHARINDEX('?',@e,1)-1,-1),LEN(@e))-CHARINDEX('/',@e,CHARINDEX('//',@e,1)+2))SELECT CHARINDEX('?',REVERSE(@e),1),RIGHT(@e,ISNULL(NULLIF(CHARINDEX('?',REVERSE(@e),1)-1,-1),0))--7,https://--7,29,www.claytabase.co.uk--29,123,Database-Consultancy-Services/Technical-Articles/SQL-Server-Data/Substring-vs-Replace-vs-Stuff--18,qrystr=claytabaseSET @e='http://www.claytabase.co.uk/'SELECT CHARINDEX('//',@e,1),LEFT(@e,CHARINDEX('//',@e,1)+1)--Protocol add 1 to pull through complete valueSELECT CHARINDEX('//',@e,1),CHARINDEX('/',@e,CHARINDEX('//',@e,1)+2),SUBSTRING(@e,CHARINDEX('//',@e,1)+2,CHARINDEX('/',@e,10)-LEN(LEFT(@e,CHARINDEX('//',@e,1)+2)))--Domain needs adjusting to remove protocolSELECT CHARINDEX('/',@e,CHARINDEX('//',@e,1)+2),ISNULL(NULLIF(CHARINDEX('?',@e,1)-1,-1),LEN(@e)),SUBSTRING(@e,CHARINDEX('/',@e,CHARINDEX('//',@e,1)+2)+1,ISNULL(NULLIF(CHARINDEX('?',@e,1)-1,-1),LEN(@e))-CHARINDEX('/',@e,CHARINDEX('//',@e,1)+2))SELECT CHARINDEX('?',REVERSE(@e),1),RIGHT(@e,ISNULL(NULLIF(CHARINDEX('?',REVERSE(@e),1)-1,-1),0))--6,http://--6,28,www.claytabase.co.uk--28,28,--0,