Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memisahkan Rentetan Dipisahkan Koma dalam SQL Server 2012?
Penggantian fungsi STRING_SPLIT dalam SQL Server 2012
Fungsi STRING_SPLIT yang diperkenalkan dalam SQL Server 2016 menyediakan cara yang mudah untuk memisahkan rentetan dipisahkan koma kepada elemen individu. Walau bagaimanapun, bagi mereka yang menggunakan SQL Server 2012, penyelesaian diperlukan kerana kekurangan fungsi ini.
Kaedah Pemisahan Alternatif
Untuk memisahkan nilai yang dipisahkan koma dalam SQL Server 2012, pertimbangkan untuk menggunakan kaedah berasaskan XML berikut dengan CROSS APPLY:
<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>
Contoh penggunaan
Anggap parameter @ID mengandungi senarai nombor yang dipisahkan koma:
<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>
Lakukan pertanyaan untuk memisahkan @ID kepada bahagian komponennya:
<code>DATA 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20</code>
Contoh Terperinci
Kaedah ini boleh diperluaskan untuk mencipta pertanyaan yang lebih kompleks. Sebagai contoh, pertanyaan berikut membahagikan @ID dan @Marks (senarai dipisahkan koma lain) ke dalam jadual yang dipanggil @StudentsMark dan mengaitkan setiap ID dengan skor yang sepadan:
<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>
Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Rentetan Dipisahkan Koma dalam SQL Server 2012?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!