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

स्ट्रिंग को पंक्तियों में विभाजित करने का सबसे कारगर तरीका

यहाँ मेरे पास सबसे अधिक प्रदर्शन करने वाला कार्य है:

CREATE FUNCTION [Resource].[udf_SplitByXml]
      (@Data NVARCHAR(MAX), @Delimiter NVARCHAR(5))
RETURNS @Table TABLE 
    ( Data NVARCHAR(MAX)
    , SequentialOrder INT IDENTITY(1, 1))
AS
BEGIN

    DECLARE @TextXml XML;
    SELECT @TextXml = CAST('<d>' + REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@Data, '&', '&amp;'), '<', '&lt;'), '>', '&gt;'), '"', '&quot;'), '''', '&apos;'), @Delimiter, '</d><d>') + '</d>' AS XML);

    INSERT INTO @Table (Data)
    SELECT Data = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(RTRIM(LTRIM(T.split.value('.', 'nvarchar(max)'))), '&amp;', '&'), '&lt;', '<'), '&gt;', '>'), '&quot;', '"'), '&apos;', '''')
    FROM @TextXml.nodes('/d') T(Split)

    RETURN
END

यहां नमूना कॉल हैं जिनका उपयोग आप परिणामों का परीक्षण करने के लिए कर सकते हैं:

SELECT * FROM Resource.udf_SplitByXml('yes, no, maybe, so', ',');
SELECT * FROM Resource.udf_SplitByXml('who|what|where|when|why|how|Uh, I don''t know!', '|');
SELECT * FROM Resource.udf_SplitByXml('Government, Education, Non-profit|Energy & Power|Yes|No', '|');
SELECT * FROM Resource.udf_SplitByXml('Energy & Power|Some<Thing>Wicked''This"Way Comes', '|');

एक अन्य विकल्प एडम मचानिक के कोड के आधार पर सीएलआर समाधान का प्रयास करना है जो एक प्रदर्शन परीक्षण का विजेता था इस ब्लॉग में



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. टी-एसक्यूएल और WHERE LIKE% पैरामीटर% क्लॉज

  2. पुरानी तालिका का नाम बदलकर, फिर एक नया संस्करण भरकर तालिका डाउनटाइम को न्यूनतम रखें?

  3. इंडेक्स बनाते समय INCLUDE क्लॉज का उपयोग क्यों करें?

  4. डेटाबेस से डेटा लोड करके ग्रिडव्यू कॉलम हैडर बनाना

  5. एक विशिष्ट कॉलम अपडेट होने पर केवल ट्रिगर कैसे निष्पादित करें (एसक्यूएल सर्वर)