Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memisahkan Rentetan Dipisahkan Koma dalam SQL Server 2012?

Bagaimana untuk Memisahkan Rentetan Dipisahkan Koma dalam SQL Server 2012?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-11 07:58:43591semak imbas

How to Split Comma-Separated Strings in 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn