Heim >Datenbank >MySQL-Tutorial >Wie teile ich durch Kommas getrennte Zeichenfolgen in SQL Server 2012 auf?

Wie teile ich durch Kommas getrennte Zeichenfolgen in SQL Server 2012 auf?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-11 07:58:43580Durchsuche

How to Split Comma-Separated Strings in SQL Server 2012?

Ersatz der STRING_SPLIT-Funktion in SQL Server 2012

Die in SQL Server 2016 eingeführte Funktion STRING_SPLIT bietet eine praktische Möglichkeit, eine durch Kommas getrennte Zeichenfolge in einzelne Elemente aufzuteilen. Für Benutzer von SQL Server 2012 ist jedoch aufgrund des Fehlens dieser Funktionalität eine Problemumgehung erforderlich.

Alternative Aufteilungsmethoden

Um durch Kommas getrennte Werte in SQL Server 2012 aufzuteilen, sollten Sie die folgende XML-basierte Methode mit CROSS APPLY verwenden:

<code class="language-sql">SELECT Split.a.value('.', 'NVARCHAR(MAX)') AS DATA
FROM
(
    SELECT CAST('<X>'+REPLACE(@ID, ',', '</X><X>')+'</X>' AS XML) AS String
) AS A
CROSS APPLY String.nodes('/X') AS Split(a);</code>

Beispielverwendung

Angenommen, der Parameter @ID enthält eine durch Kommas getrennte Liste von Zahlen:

<code class="language-sql">@ID varchar = '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20';</code>

Führen Sie eine Abfrage aus, um die @ID in ihre Bestandteile aufzuteilen:

<code>DATA
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20</code>

Erweiterte Beispiele

Diese Methode kann erweitert werden, um komplexere Abfragen zu erstellen. Die folgende Abfrage teilt beispielsweise @IDs und @Marks (eine weitere durch Kommas getrennte Liste) in eine Tabelle mit dem Namen @StudentsMark auf und ordnet jeder ID die entsprechende Punktzahl zu:

<code class="language-sql">DECLARE @ID NVARCHAR(300)= '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20';
DECLARE @Marks NVARCHAR(300)= '0,1,2,5,8,9,4,6,7,3,5,2,7,1,9,4,0,2,5,0';
DECLARE @StudentsMark TABLE
(id    NVARCHAR(300),
 marks NVARCHAR(300)
); 
;WITH CTE
     AS (
     SELECT Split.a.value('.', 'NVARCHAR(MAX)') id,
            ROW_NUMBER() OVER(ORDER BY
                             (
                                 SELECT NULL
                             )) RN
     FROM
     (
         SELECT CAST('<X>'+REPLACE(@ID, ',', '</X><X>')+'</X>' AS XML) AS String
     ) AS A
     CROSS APPLY String.nodes('/X') AS Split(a)),
     CTE1
     AS (
     SELECT Split.a.value('.', 'NVARCHAR(MAX)') marks,
            ROW_NUMBER() OVER(ORDER BY
                             (
                                 SELECT NULL
                             )) RN
     FROM
     (
         SELECT CAST('<X>'+REPLACE(@Marks, ',', '</X><X>')+'</X>' AS XML) AS String
     ) AS A
     CROSS APPLY String.nodes('/X') AS Split(a))
     INSERT INTO @StudentsMark
            SELECT C.id,
                   C1.marks
            FROM CTE C
                 LEFT JOIN CTE1 C1 ON C1.RN = C.RN;
SELECT *
FROM @StudentsMark;</code>

Das obige ist der detaillierte Inhalt vonWie teile ich durch Kommas getrennte Zeichenfolgen in SQL Server 2012 auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn