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

SQL कॉलम में सीमांकित मानों को कई पंक्तियों में विभाजित करना

यदि आप SQL सर्वर 2016+ पर हैं

आप नए STRING_SPLIT . का उपयोग कर सकते हैं फ़ंक्शन, जिसके बारे में मैंने यहाँ ब्लॉग किया है, और ब्रेंट ओज़र ने यहाँ के बारे में ब्लॉग किया है।

SELECT s.[message-id], f.value
  FROM dbo.SourceData AS s
  CROSS APPLY STRING_SPLIT(s.[recipient-address], ';') as f;

यदि आप अभी भी SQL Server 2016 से पहले के संस्करण पर हैं

एक विभाजन समारोह बनाएँ। यह वहां मौजूद कई उदाहरणों में से एक है:

CREATE FUNCTION dbo.SplitStrings
(
    @List       NVARCHAR(MAX),
    @Delimiter  NVARCHAR(255)
)
RETURNS TABLE
AS
    RETURN (SELECT Number = ROW_NUMBER() OVER (ORDER BY Number),
        Item FROM (SELECT Number, Item = LTRIM(RTRIM(SUBSTRING(@List, Number, 
        CHARINDEX(@Delimiter, @List + @Delimiter, Number) - Number)))
    FROM (SELECT ROW_NUMBER() OVER (ORDER BY s1.[object_id])
        FROM sys.all_objects AS s1 CROSS APPLY sys.all_objects) AS n(Number)
    WHERE Number <= CONVERT(INT, LEN(@List))
        AND SUBSTRING(@Delimiter + @List, Number, 1) = @Delimiter
    ) AS y);
GO

मैंने यहां कुछ अन्य लोगों के बारे में यहां चर्चा की है, और यहां पहली जगह में विभाजित होने से बेहतर दृष्टिकोण पर चर्चा की है।

अब आप आसानी से एक्सट्रपलेशन कर सकते हैं:

SELECT s.[message-id], f.Item
  FROM dbo.SourceData AS s
  CROSS APPLY dbo.SplitStrings(s.[recipient-address], ';') as f;

इसके अलावा, मैं सुझाव देता हूं कि कॉलम नामों में डैश न डालें। इसका मतलब है कि आपको उन्हें हमेशा [square brackets] . में रखना होगा ।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर - INSERT के बाद वापसी मूल्य

  2. T-SQL का उपयोग करके लिंक किए गए सर्वर विकल्पों को कैसे संपादित करें

  3. पहली बार इसे देखने वालों के लिए MS SQL सर्वर का विश्लेषण

  4. SQL सर्वर में परिणाम सेट की स्कीमा प्राप्त करने के 3 तरीके

  5. Azure SQL DB घोषणा (पूर्वावलोकन) के लिए स्पॉटलाइट क्लाउड समर्थन