Heim >Datenbank >MySQL-Tutorial >Wie teile ich durch Kommas getrennte Zeichenfolgen in SQL Server 2012 auf?
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!