Database
 sql >> डेटाबेस >  >> RDS >> Database

एक कॉलम में स्प्लिट सीमांकित स्ट्रिंग्स को सम्मिलित करने के कई तरीके

इस लेख में, मैं सीमांकित स्ट्रिंग को विभाजित करने और इसे SQL सर्वर में किसी तालिका के कॉलम में सम्मिलित करने के कई तरीके प्रदर्शित करूंगा। आप इसे निम्न विधियों का उपयोग करके कर सकते हैं:

  1. सीमांकित स्ट्रिंग को XML में बदलें, स्ट्रिंग को विभाजित करने के लिए XQuery का उपयोग करें, और इसे तालिका में सहेजें।
  2. स्ट्रिंग को विभाजित करने और इसे तालिका में सम्मिलित करने के लिए एक उपयोगकर्ता-परिभाषित तालिका-मूल्यवान फ़ंक्शन बनाएं।
  3. STRING_SPLIT फ़ंक्शन का उपयोग करके स्ट्रिंग को विभाजित करें और आउटपुट को तालिका में डालें।

उपरोक्त विधियों को प्रदर्शित करने के लिए, मुझे एक डेमो सेटअप तैयार करने दें। सबसे पहले, हम कर्मचारी . नाम की एक तालिका बनाते हैं डेमोडेटाबेस . पर . ऐसा करने के लिए, हमें निम्नलिखित क्वेरी को निष्पादित करने की आवश्यकता है:

DEMODATABASE GO CREATE TABLE EMPLOYEE का उपयोग करें (ID INT IDENTITY (1, 1), EMPLOYEE_NAME VARCHAR(MAX))

इस डेमो के लिए, हम सभी कर्मचारियों के नाम एक पंक्ति में डालेंगे और कर्मचारियों के नाम अल्पविराम से अलग हो जाएंगे। ऐसा करने के लिए, हमें निम्नलिखित क्वेरी को निष्पादित करने की आवश्यकता है:

कर्मचारियों में सम्मिलित करें (EMPLOYEE_NAME) VALUES ('DULCE , MARA , philip , KATHLEEN, NEREIDA , GASTON , ETTA , EARLEAN , VINCENZA')

यह सत्यापित करने के लिए कि कॉलम में डेटा डाला गया है, निम्न क्वेरी निष्पादित करें।

कर्मचारी से *चुनें

निम्न आउटपुट है:

जैसा कि मैंने ऊपर उल्लेख किया है, हम सीमांकित स्ट्रिंग को विभाजित करने जा रहे हैं और इसे एक तालिका में सम्मिलित कर रहे हैं। इसलिए, हम कर्मचारी_विवरण . नाम की एक तालिका बनाएंगे उपरोक्त विधियों में से किसी एक द्वारा सीमांकित स्ट्रिंग विभाजन को संग्रहीत करने के लिए।

तालिका बनाने के लिए, निम्नलिखित कोड निष्पादित करें:

DEMODATABASE GO CREATE TABLE EMPLOYEE_DETAIL का उपयोग करें (ID INT IDENTITY(1, 1) प्राथमिक कुंजी क्लस्टर, EMPNAME VARCHAR(MAX) NOT NULL)

विधि 1:सीमांकित स्ट्रिंग को विभाजित करने के लिए STRING_SPLIT फ़ंक्शन का उपयोग करें

हम STRING_SPLIT . का उपयोग करेंगे एक कॉलम में स्ट्रिंग को विभाजित करने और इसे एक टेबल में डालने के लिए कार्य करता है। ऐसा करने से पहले, मैं STRING_SPLIT . के बारे में बता दूं समारोह।

STRING_SPLIT फ़ंक्शन क्या है

STRING_SPLIT एक तालिका-मूल्यवान फ़ंक्शन है, जिसे SQL सर्वर 2016 में पेश किया गया है। यह फ़ंक्शन पंक्ति के भीतर विशेष वर्ण के आधार पर स्ट्रिंग को विभाजित करता है और आउटपुट को एक अलग तालिका में लौटाता है। हम इस फ़ंक्शन का उपयोग उन डेटाबेस पर कर सकते हैं जिनका संगतता स्तर 130 के बराबर या उससे अधिक है।

STRING_SPLIT फ़ंक्शन दो पैरामीटर स्वीकार करता है और अलग किए गए मानों के साथ एक तालिका देता है। STRING_SPLIT फ़ंक्शन का सिंटैक्स निम्नलिखित है।

चुनें STRING_SPLIT (STRING, SPECIALCHARACTER)

उपरोक्त वाक्य रचना में, विशेष वर्ण एक वर्ण है जिसका उपयोग इनपुट स्ट्रिंग को अलग करने के लिए किया जाएगा।

निम्नलिखित STRING_SPLIT फ़ंक्शन का एक सरल उदाहरण है।

DECLARE @STRING VARCHAR(MAX) DECLARE @SPECIALCHARACTER CHAR(1) SET @STRING='NISARG, NIRALI, रमेश, सुरेश' चुनें * STRING_SPLIT से (@STRING, ',')

निम्नलिखित क्वेरी का आउटपुट है:

जैसा कि आप ऊपर के उदाहरण में देख सकते हैं, STRING_SPLIT द्वारा दिए गए आउटपुट कॉलम का नाम "मूल्य" है। हम "मान" कॉलम पर WHERE क्लॉज का उपयोग करके फ़ंक्शन द्वारा लौटाए गए आउटपुट को फ़िल्टर कर सकते हैं और साथ ही, हम ORDER BY का उपयोग करके आउटपुट के क्रम को सॉर्ट कर सकते हैं। "मान" कॉलम पर क्लॉज।

निम्नलिखित एक उदाहरण है।

अब एक टेबल में एक सीमांकित स्ट्रिंग डालने के लिए, हम निम्नलिखित कार्य करेंगे:

  1. @EmployeeName named नाम का एक वैरिएबल बनाएं , जो कर्मचारी . का आउटपुट रखता है टेबल। ऐसा करने के लिए, निम्नलिखित कोड निष्पादित करें:
  2. @Separator called नामक एक और वैरिएबल बनाएं चार डेटा प्रकार के। यह चर विभाजक का मान रखता है, जिसका उपयोग स्ट्रिंग्स को कई मानों में विभाजित करने के लिए किया जाएगा। वेरिएबल बनाने और विभाजक को मान निर्दिष्ट करने के लिए, निम्नलिखित कोड निष्पादित करें:
    DECLARE @SEPARATOR CHAR(1) SET @SEPARATOR=','
  3. अब “STRING_SPLIT . का उपयोग करें ” कर्मचारी_नाम . के मानों को विभाजित करने के लिए कार्य करता है कर्मचारी . का स्तंभ तालिका और मानों को EMPLOYEENAME . में डालें टेबल। ऐसा करने के लिए, निम्न कोड निष्पादित करें:

पूरी स्क्रिप्ट निम्नलिखित है:

घोषणा @EMPLOYEENAME VARCHAR(MAX) सेट @EMPLOYEENAME =(कर्मचारी से कर्मचारी का नाम चुनें) घोषणा @SEPARATOR CHAR(1) SET @SEPARATOR=',' INSERT INTO EMPLOYEE_DETAIL (EMPNAME) सेलेक्ट करें * PARATORING से चुनें )

उपरोक्त स्क्रिप्ट निष्पादित करें। स्क्रिप्ट तालिका में नौ पंक्तियाँ सम्मिलित करेगी। एक बार इसे निष्पादित करने के बाद, सुनिश्चित करें कि डेटा EMPLOYEENAME . में डाला गया है टेबल। इसके लिए निम्न क्वेरी निष्पादित करें:

चुनें* EMPLOYEE_DETAIL से

निम्न आउटपुट है:

विधि 2:XML का उपयोग करके स्ट्रिंग को विभाजित करें और तालिका में आउटपुट डालें

जब हम सीमांकित स्ट्रिंग को विभाजित करना चाहते हैं, तो हम इसे टेबल-वैल्यू फ़ंक्शंस का उपयोग करके कर सकते हैं। जैसा कि हम जानते हैं, उपयोगकर्ता द्वारा परिभाषित तालिका-मूल्यवान कार्य संसाधन-गहन हैं और इससे बचा जाना चाहिए। ऐसे मामलों में हमारे पास ज्यादा विकल्प उपलब्ध नहीं होते हैं। जैसा कि मैंने बताया, STRING_SPLIT फ़ंक्शन का उपयोग उन डेटाबेस के लिए किया जा सकता है जिनका संगतता स्तर 130 से अधिक या उसके बराबर है। ऐसी परिस्थितियों में, एक सीमांकित स्ट्रिंग को विभाजित करने का तरीका खोजना मुश्किल है। हमने इस कार्य के लिए एक सरल और कुशल समाधान बनाया है। हम XML का उपयोग करके स्ट्रिंग को विभाजित कर सकते हैं।

इसलिए, इस खंड में, मैं एक्सएमएल के कोड की व्याख्या करने जा रहा हूं जिसका उपयोग कॉलम की विभिन्न पंक्तियों में विभाजित सीमांकित स्ट्रिंग को सम्मिलित करने के लिए किया जा सकता है।

मैंने पूरे कोड को तीन चरणों में विभाजित किया है।

चरण 1 :सीमांकित स्ट्रिंग को XML फॉर्मेट में बदलें। ऐसा करने के लिए, निम्न कोड निष्पादित करें:

 डेमोडेटाबेस का उपयोग करें एक्सएमएल के रूप में घोषित @xml, @QueryData AS VARCHAR (अधिकतम), @delimiter AS VARCHAR(10) SET @QueryData =(कर्मचारी से कर्मचारी_नाम चुनें) SET @delimiter =',' SET @xml =Cast( ('' + बदलें(@QueryData, @delimiter, '') + '') एक्सएमएल के रूप में) @XML चुनें

निम्न आउटपुट है:

संपूर्ण XML स्ट्रिंग देखने के लिए, सेल पर क्लिक करें जैसा कि ऊपर चित्र में दिखाया गया है। एक बार जब आप सेल पर क्लिक करते हैं, तो एक्सएमएल फाइल इस तरह दिखनी चाहिए:

DULCE  MARA  फिलिप  KATHLEEN NEREIDA  GASTON  ETTA  अर्लीन  VINCENZA

चरण 2 :एक बार स्ट्रिंग को एक्सएमएल में बदलने के बाद, एक्सएमएल फाइल को क्वेरी करने के लिए एक्स-क्वेरी का उपयोग करें। ऐसा करने के लिए, निम्न कोड निष्पादित करें:

 डेमोडाटाबेस का उपयोग करें एक्सएमएल के रूप में एक्सएमएल, @एसटीआर एएस वचर (मैक्स), @DELIMITER AS VARCHAR(10) सेट @ एसटीआर =(कर्मचारियों से कर्मचारी का चयन करें) सेट @DELIMITER =',' सेट @ एक्सएमएल =कास्ट ( ('' + REPLACE(@STR, @DELIMITER, '') + '') XML के रूप में) N.VALUE('.', 'VARCHAR(10) चुनें ') @XML.NODES('EMPNAME') से T(N) के रूप में मान के रूप में

निम्न आउटपुट है:

चरण 3 :ऊपर निष्पादित क्वेरी द्वारा उत्पन्न आउटपुट को कर्मचारी_विवरण . में डालें टेबल। ऐसा करने के लिए, निम्न कोड निष्पादित करें:

 DEMODATABASEGODECLARE @XML AS XML, @STR AS VARCHAR (MAX), @DELIMITER AS VARCHAR(10)SET @STR=(Select EMPLOYEE_NAME FROM EMPLOYEE)SET @DELIMITER =','SET @XML =CAST((') का उपयोग करें '+REPLACE(@STR,@DELIMITER ,'')+'') XML के रूप में) EMPLOYEE_DETAIL (EMPNAME) में डालें N.VALUE('.', ' VARCHAR(10)') @XML.NODES('EMPNAME') AS T(N)/*Output (9 पंक्तियाँ प्रभावित) से मान के रूप में */

एक बार डेटा डालने के बाद, यह सत्यापित करने के लिए कि डेटा डाला गया है, निम्न स्क्रिप्ट निष्पादित करें। निम्नलिखित क्वेरी निष्पादित करें:

DEMODATABASE का उपयोग करें चुनें * EMPLOYEE_DETAIL से चुनें

निम्न आउटपुट है।

विधि 3:तालिका-मूल्यवान फ़ंक्शन का उपयोग करके स्ट्रिंग को विभाजित करें और तालिका में फ़ंक्शन का आउटपुट डालें

यह दृष्टिकोण पारंपरिक है, और SQL सर्वर के सभी संस्करणों और संस्करणों में समर्थित है। इस दृष्टिकोण में, हम एक उपयोगकर्ता-परिभाषित तालिका-मूल्यवान फ़ंक्शन बनाएंगे जो लूप और CHARINDEX और SUBSTRING फ़ंक्शन का उपयोग करेगा।

फ़ंक्शन बनाने के लिए निम्नलिखित कोड है:

REATE FUNCTION [DBO].SPLIT_DELIMITED_STRING (@SQLQUERY VARCHAR(MAX), @DELIMITOR CHAR(1)) RETURS @RESULT TABLE(VALUE VARCHAR(MAX)) AS BEGIN DECLARE @DELIMITORPOSITION INT =CHARINDEX(@DELIMITOR, @QUERINDEX@DELIMITOR, ), @VALUE VARCHAR(MAX), @STARTPOSITION INT =1 IF @DELIMITORPOSITION =0 @RESULT VALUES (@SQLQUERY) RETURN END SET @SQLQUERY =@SQLQUERY + @DELIMITOR जबकि @DELIMITORPOSITION> 0 BEGIN INSERT INSERT INTO सबस्ट्रिंग(@SQLQUERY, @STARTPOSITION, @DELIMITORPOSITION - @STARTPOSITION) IF(@VALUE <> '') INSERT INTO @RESULT VALUES (@VALUE) SET @STARTPOSITION =@DELIMITORPOSITION + 1 SET @DELIMITORPOSITION,(@DELIMITORPOSITION,(@DELIMITORPOSITION) SQLQUERY, @STARTPOSITION) END RETURN END

एक बार फ़ंक्शन बन जाने के बाद, क्वेरी को विभाजित करने के लिए निम्न क्वेरी निष्पादित करें और आउटपुट को Employee_Detail में डालें टेबल।

DECLARE @SQLQUERY NVARCHAR(MAX) SET @SQLQUERY=(कर्मचारियों से EMPLOYEE_NAME का चयन करें) EMPLOYEE_DETAIL में डालें चुनें * SPLIT_DELIMITED_STRING से(@SQLQUERY, ',')

तालिका में डेटा डालने के बाद, यह सत्यापित करने के लिए कि डेटा ठीक से डाला गया है, निम्न क्वेरी निष्पादित करें

सारांश

इस लेख में, मैंने कवर किया है:

  1. तालिका में सीमांकित स्ट्रिंग को विभाजित करने और सम्मिलित करने के लिए अलग दृष्टिकोण।
  2. उच्च स्तर STRING_SPLIT फ़ंक्शन का सारांश है।
  3. XML और XQuery का उपयोग करके एक सीमांकित स्ट्रिंग को विभाजित और सम्मिलित करें।
  4. उपयोगकर्ता द्वारा परिभाषित तालिका-मूल्यवान फ़ंक्शन का उपयोग करके सीमांकित स्ट्रिंग को विभाजित और सम्मिलित करें।

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल कुंजी

  2. अपने संग्रहण सबसिस्टम का परीक्षण करने के लिए Microsoft DiskSpd का उपयोग करना

  3. 8 WP-CLI आपकी साइट को साफ और अनुकूलित करने के लिए आदेश देता है

  4. मेडिकल अपॉइंटमेंट बुकिंग ऐप के लिए एक डेटा मॉडल

  5. ग्रुप बाय बनाम ऑर्डर बाय