Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Membahagikan Nilai Terhad dalam Lajur SQL kepada Berbilang Baris?
Pembatas dalam lajur SQL boleh mencipta cabaran apabila cuba membahagikan nilai kepada berbilang barisan. Artikel ini menyediakan penyelesaian untuk kedua-dua versi terbaru dan versi lama bagi SQL Server.
SQL Server 2016 memperkenalkan fungsi STRING_SPLIT, membolehkan untuk memudahkan pemisahan nilai menggunakan yang berikut sintaks:
SELECT s.[message-id], f.value FROM dbo.SourceData AS s CROSS APPLY STRING_SPLIT(s.[recipient-address], ';') as f;
Untuk versi SQL Server yang lebih lama, cipta fungsi pisah seperti:
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
Setelah fungsi split dicipta, anda boleh menggunakannya untuk mengekstrak nilai:
SELECT s.[message-id], f.Item FROM dbo.SourceData AS s CROSS APPLY dbo.SplitStrings(s.[recipient-address], ';') as f;
Untuk storan dan rujukan yang optimum, elakkan menggunakan tanda sempang dalam nama lajur, kerana ia perlu disertakan dalam kurungan segi empat sama.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membahagikan Nilai Terhad dalam Lajur SQL kepada Berbilang Baris?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!