Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memisahkan Nilai Terhad dalam Lajur SQL kepada Berbilang Baris?

Bagaimana untuk Memisahkan Nilai Terhad dalam Lajur SQL kepada Berbilang Baris?

Patricia Arquette
Lepaskan: 2025-01-03 18:33:43
asal
328 orang telah melayarinya

How to Split Delimited Values in a SQL Column into Multiple Rows?

Memisahkan Nilai Terhad dalam Lajur SQL kepada Berbilang Baris

Dalam situasi di mana lajur SQL mengandungi data terhad, mungkin perlu mengekstrak dan formatkan nilai ke dalam berbilang baris. Tugas ini menjadi sangat mencabar apabila berurusan dengan volum data yang besar atau rentetan terhad yang sangat panjang.

Pertimbangkan contoh berikut:

Jadual Sumber

message-id recipient-address
[email protected] [email protected]
[email protected] [email protected]
[email protected] [email protected];[email protected];[email protected]

Output yang Diingini

message-id recipient-address
[email protected] [email protected]
[email protected] [email protected]
[email protected] [email protected]
[email protected] [email protected]
[email protected] [email protected]

Untuk SQL Server versi 2016 dan ke atas, fungsi STRING_SPLIT menyediakan penyelesaian yang mudah:

SELECT s.[message-id], f.value
FROM dbo.SourceData AS s
CROSS APPLY STRING_SPLIT(s.[recipient-address], ';') AS f;
Salin selepas log masuk

Sebelum SQL Server 2016, fungsi pemisahan tersuai boleh dibuat:

CREATE FUNCTION dbo.SplitStrings
(
    @List NVARCHAR(MAX),
    @Delimiter NVARCHAR(255)
)
RETURNS TABLE
AS
RETURN (SELECT Number = ROW_NUMBER() OVER (ORDER BY Number),
        Item FROM (SELECT Number, Item = LTRIM(RTRIM(SUBSTRING(@List, Number,
        CHARINDEX(@Delimiter, @List + @Delimiter, Number) - Number)))
    FROM (SELECT ROW_NUMBER() OVER (ORDER BY s1.[object_id])
        FROM sys.all_objects AS s1 CROSS APPLY sys.all_objects) AS n(Number)
    WHERE Number <= CONVERT(INT, LEN(@List))
        AND SUBSTRING(@Delimiter + @List, Number, 1) = @Delimiter
    ) AS y);
GO
Salin selepas log masuk

Dengan pemisahan berfungsi di tempatnya, data boleh diekstrak dan diformatkan:

SELECT s.[message-id], f.Item
FROM dbo.SourceData AS s
CROSS APPLY dbo.SplitStrings(s.[recipient-address], ';') AS f;
Salin selepas log masuk

Dengan memanfaatkan teknik ini, adalah mungkin untuk memisahkan nilai yang dibataskan dengan cekap kepada berbilang baris, memudahkan pemformatan data dan tugasan analisis.

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Nilai Terhad dalam Lajur SQL kepada Berbilang Baris?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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