Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memisahkan Rentetan Terhad dalam T-SQL dengan Cekap?

Bagaimana untuk Memisahkan Rentetan Terhad dalam T-SQL dengan Cekap?

Mary-Kate Olsen
Lepaskan: 2025-01-23 08:41:11
asal
609 orang telah melayarinya

How to Efficiently Split Delimited Strings in T-SQL?

Memisahkan Rentetan Terhad dalam T-SQL dengan cekap

Artikel ini meneroka teknik yang cekap untuk mengasingkan rentetan dipisahkan koma (cth., "1,2,3,4,5") ke dalam baris individu dalam jadual T-SQL atau pembolehubah jadual. Dua kaedah berkesan diperincikan di bawah:

Kaedah 1: Penghuraian XML

Pendekatan ini memanfaatkan keupayaan penghuraian XML T-SQL untuk penyelesaian ringkas:

<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>
Salin selepas log masuk

Kaedah 2: CTE Rekursif

Bagi mereka yang lebih suka pendekatan Rekursif Common Table Expression (CTE):

<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>
Salin selepas log masuk

Kedua-dua kaedah menawarkan pemisahan rentetan yang cekap, membolehkan pemprosesan dan analisis data seterusnya. Untuk manipulasi rentetan yang lebih kompleks, rujuk fungsi rentetan T-SQL khusus dan teknik lanjutan.

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Rentetan Terhad dalam T-SQL dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan