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

Bagaimana untuk Memisahkan Rentetan Dibatasi Koma ke dalam Baris dalam T-SQL?

Susan Sarandon
Susan Sarandonasal
2025-01-23 08:51:11525semak imbas

How to Split Comma-Delimited Strings into Rows in T-SQL?

Teknik pemisahan rentetan dalam T-SQL

Memisahkan rentetan yang dipisahkan koma kepada berbilang baris ialah tugas biasa dalam SQL. T-SQL (pelaksanaan SQL Microsoft) menyediakan beberapa cara untuk mencapai matlamat ini.

Gunakan XML

Salah satu cara ialah menukar rentetan kepada XML. Struktur XML membolehkan pengekstrakan nilai individu dengan mudah sebagai nod XML:

<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>

Gunakan CTE (Ungkapan Jadual Biasa)

Alternatifnya ialah menggunakan CTE untuk mencipta satu siri baris yang mewakili aksara rentetan:

<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>

Kaedah lain

Cara lain untuk memisahkan rentetan dalam T-SQL termasuk menggunakan fungsi CHARINDEX() dan fungsi REGEX_SPLIT_TO_TABLE() (diperkenalkan dalam SQL Server 2016). Untuk lebih banyak contoh dan perbincangan, lihat artikel berkaitan seperti "Bagaimana untuk memisahkan rentetan yang dipisahkan koma?"

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Rentetan Dibatasi Koma ke dalam Baris 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