Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memisahkan Rentetan Dipisahkan Koma dalam T-SQL?

Bagaimana untuk Memisahkan Rentetan Dipisahkan Koma dalam T-SQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-23 08:47:13771semak imbas

How to Split Comma-Separated Strings in T-SQL?

Simulasikan fungsi Split dalam T-SQL

Memisahkan nilai yang dipisahkan koma ke dalam baris yang berasingan ialah tugas biasa dalam pengaturcaraan. Dalam T-SQL, tiada fungsi split asli, tetapi terdapat beberapa teknik untuk mencapai hasil yang serupa.

Salah satu cara ialah menggunakan pemprosesan XML. Dengan menukar rentetan dipisahkan koma kepada dokumen XML dan kemudian menggunakan XQuery untuk mengekstrak nilai, kami boleh mengisi jadual dengan nilai individu ini:

<code class="language-sql">DECLARE @xml xml, @str varchar(100), @delimiter varchar(10)
SET @str = '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15'
SET @delimiter = ','
SET @xml = cast(('<X>'+replace(@str, @delimiter, '</X><X>')+'</X>') as xml)
SELECT C.value('.', 'varchar(10)') as value FROM @xml.nodes('X') as X(C)</code>

Alternatifnya ialah menggunakan ungkapan jadual biasa rekursif (CTE) untuk mengulangi rentetan dan mengekstrak subrentetan:

<code class="language-sql">DECLARE @str varchar(100), @delimiter varchar(10)
SET @str = '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15'
SET @delimiter = ','
;WITH cte AS
(
    SELECT 0 a, 1 b
    UNION ALL
    SELECT b, CHARINDEX(@delimiter, @str, b) + LEN(@delimiter)
    FROM CTE
    WHERE b > a
)
SELECT SUBSTRING(@str, a,
CASE WHEN b > LEN(@delimiter) 
    THEN b - a - LEN(@delimiter) 
    ELSE LEN(@str) - a + 1 END) value      
FROM cte WHERE a > 0</code>

Banyak cara lain untuk membelah rentetan dipisahkan koma dalam T-SQL boleh didapati dalam pautan rujukan yang disediakan dalam jawapan Stack Overflow ini: Bagaimana untuk membelah rentetan dipisahkan koma?

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Rentetan Dipisahkan Koma dalam T-SQL?. 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