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
Freigeben: 2025-01-11 07:58:43
Original
618 Leute haben es durchsucht

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:

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);
Nach dem Login kopieren

Beispielverwendung

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

@ID varchar = '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20';
Nach dem Login kopieren

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>
Nach dem Login kopieren

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:

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;
Nach dem Login kopieren

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!

Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage