Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memisahkan Alamat Penerima Terhad dalam SQL kepada Berbilang Baris?
Memisahkan Nilai Terhad dalam Lajur SQL kepada Berbilang Baris
Pernyataan Masalah:
Apabila memasukkan Exchange 2007 Penjejakan Mesej log masuk ke dalam jadual SQL, penerima dalam sempadan lajur alamat penerima kadangkala mengandungi berbilang nilai. Pengguna ingin membahagikan nilai ini kepada baris berasingan dalam jadual lain sambil mengekalkan perkaitan id mesej asal.
Penyelesaian:
SQL Server 2016
Menggunakan STRING_SPLIT baharu fungsi:
SELECT s.[message-id], f.value FROM dbo.SourceData AS s CROSS APPLY STRING_SPLIT(s.[recipient-address], ';') as f;
SQL Server Pra-2016
Mencipta fungsi split tersuai dbo.SplitStrings:
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);
Manipulasi Data:
SELECT s.[message-id], f.Item FROM dbo.SourceData AS s CROSS APPLY dbo.SplitStrings(s.[recipient-address], ';') as f;
Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Alamat Penerima Terhad dalam SQL kepada Berbilang Baris?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!