Memisahkan Nilai Terhad dalam Lajur SQL kepada Berbilang Baris
Apabila berurusan dengan jadual yang mengandungi nilai terhad dalam satu lajur, seperti penerima -medan alamat yang dipisahkan dengan koma bertitik (;), adalah perlu untuk membahagikan nilai ini kepada berbilang baris untuk pemprosesan selanjutnya atau analisis. Artikel ini meneroka pelbagai kaedah untuk mencapai ini menggunakan SQL, terutamanya memfokuskan pada mengoptimumkan prestasi dan kecekapan.
Menggunakan Fungsi STRING_SPLIT untuk SQL Server 2016
Jika anda menggunakan SQL Server 2016 atau lebih baru, anda boleh memanfaatkan fungsi STRING_SPLIT untuk membahagikan nilai terhad dengan cekap. Sintaks untuk fungsi ini adalah seperti berikut:
STRING_SPLIT(@list, @delimiter)
Begini cara anda boleh menggunakan STRING_SPLIT untuk mengekstrak alamat penerima ke dalam baris yang berasingan:
SELECT [message-id], value FROM dbo.SourceData CROSS APPLY STRING_SPLIT([recipient-address], ';') AS f;
Mencipta Fungsi Split untuk Pra -SQL Server 2016 Versions
Untuk SQL Server versi sebelum 2016, anda boleh membuat fungsi split tersuai. Satu contoh fungsi sedemikian ialah:
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
Anda kemudian boleh menggunakan fungsi ini untuk membahagikan nilai yang dibataskan seperti berikut:
SELECT [message-id], f.Item FROM dbo.SourceData CROSS APPLY dbo.SplitStrings([recipient-address], ';') AS f;
Pengoptimuman dan Pertimbangan
Untuk memastikan prestasi optimum, pertimbangkan petua berikut:
Atas ialah kandungan terperinci Bagaimana untuk Membahagikan Nilai Terhad dalam Lajur SQL kepada Berbilang Baris dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!